Coverage for cuda/core/_device.pyx: 93.66%
489 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context, Context_check_open
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._resource_handles cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 context_synchronize,
27 get_primary_context,
28 get_last_error,
29 as_cu,
30)
32from cuda.core._stream import IsStreamType, Stream, StreamOptions
33from cuda.core._utils.clear_error_support import assert_type
34from cuda.core._utils.cuda_utils import (
35 ComputeCapability,
36 CUDAError,
37 driver,
38 handle_return,
39 runtime,
40)
41from cuda.core._stream cimport (
42 default_stream,
43)
45from typing import TYPE_CHECKING
47if TYPE_CHECKING:
48 import cuda.core.system # no-cython-lint
49 from cuda.core.graph import GraphBuilder
50 from cuda.core.texture import (
51 MipmappedArray,
52 MipmappedArrayOptions,
53 OpaqueArray,
54 OpaqueArrayOptions,
55 ResourceDescriptor,
56 SurfaceObject,
57 TextureObject,
58 TextureObjectOptions,
59 )
61# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
62# but it seems it is very convenient to expose them for testing purposes...
63_tls = threading.local()
64_lock = threading.Lock()
65cdef bint _is_cuInit = False
67__all__ = ['Device']
70cdef class DeviceProperties:
71 """
72 A class to query various attributes of a CUDA device.
74 Attributes are read-only and provide information about the device.
75 """
76 cdef:
77 int _handle
78 dict _cache
80 def __init__(self, *args, **kwargs) -> None:
81 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2hQ
83 @classmethod
84 def _init(cls, handle: int) -> DeviceProperties:
85 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
86 self._handle = handle 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
87 self._cache = {} 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
88 return self 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
90 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
91 """Retrieve the attribute value directly from the driver."""
92 cdef int val
93 cdef cydriver.CUresult err
94 with nogil: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
95 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
96 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
97 return <int>default
98 HANDLE_RETURN(err) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
99 return val 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
101 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
102 """Retrieve the attribute value, using cache if applicable."""
103 cached = self._cache.get(attr) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
104 if cached is not None: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
105 return cached 2=f?f@f[f]f^fNn,f~qarbrttl +mYo+n8m7oPnQnagRnXeSnGmkbwnQF0c`e{estYe2H3H4HwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi
106 cdef int value = self._get_attribute(attr, default) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
107 self._cache[attr] = value # setdefault not needed for ints 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
108 return value 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
110 @property
111 def max_threads_per_block(self) -> int:
112 """int: Maximum number of threads per block."""
113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 20mAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F2HnIoIpIqIrIsI3HtIuIvIwIxIyI4HzIAIBICIDIEI
115 @property
116 def max_block_dim_x(self) -> int:
117 """int: Maximum block dimension X."""
118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2:G
120 @property
121 def max_block_dim_y(self) -> int:
122 """int: Maximum block dimension Y."""
123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2;G
125 @property
126 def max_block_dim_z(self) -> int:
127 """int: Maximum block dimension Z."""
128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2=G
130 @property
131 def max_grid_dim_x(self) -> int:
132 """int: Maximum grid dimension X."""
133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2a Ym+m
135 @property
136 def max_grid_dim_y(self) -> int:
137 """int: Maximum grid dimension Y."""
138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2?G
140 @property
141 def max_grid_dim_z(self) -> int:
142 """int: Maximum grid dimension Z."""
143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2@G
145 @property
146 def max_shared_memory_per_block(self) -> int:
147 """int: Maximum shared memory available per block in bytes."""
148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2^GAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F2HnIoIpIqIrIsI3HtIuIvIwIxIyI4HzIAIBICIDIEI
150 @property
151 def total_constant_memory(self) -> int:
152 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2IH
155 @property
156 def warp_size(self) -> int:
157 """int: Warp size in threads."""
158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2LH
160 @property
161 def max_pitch(self) -> int:
162 """int: Maximum pitch in bytes allowed by memory copies."""
163 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2]G
165 @property
166 def maximum_texture1d_width(self) -> int:
167 """int: Maximum 1D texture width."""
168 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2eH
170 @property
171 def maximum_texture1d_linear_width(self) -> int:
172 """int: Maximum width for a 1D texture bound to linear memory."""
173 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 22m
175 @property
176 def maximum_texture1d_mipmapped_width(self) -> int:
177 """int: Maximum mipmapped 1D texture width."""
178 return self._get_cached_attribute( 2rG
179 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2rG
180 )
182 @property
183 def maximum_texture2d_width(self) -> int:
184 """int: Maximum 2D texture width."""
185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2mH
187 @property
188 def maximum_texture2d_height(self) -> int:
189 """int: Maximum 2D texture height."""
190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2hH
192 @property
193 def maximum_texture2d_linear_width(self) -> int:
194 """int: Maximum width for a 2D texture bound to linear memory."""
195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2lH
197 @property
198 def maximum_texture2d_linear_height(self) -> int:
199 """int: Maximum height for a 2D texture bound to linear memory."""
200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2jH
202 @property
203 def maximum_texture2d_linear_pitch(self) -> int:
204 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
205 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2kH
207 @property
208 def maximum_texture2d_mipmapped_width(self) -> int:
209 """int: Maximum mipmapped 2D texture width."""
210 return self._get_cached_attribute( 2tG
211 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2tG
212 )
214 @property
215 def maximum_texture2d_mipmapped_height(self) -> int:
216 """int: Maximum mipmapped 2D texture height."""
217 return self._get_cached_attribute( 2Pm
218 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2Pm
219 )
221 @property
222 def maximum_texture3d_width(self) -> int:
223 """int: Maximum 3D texture width."""
224 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2nH
226 @property
227 def maximum_texture3d_height(self) -> int:
228 """int: Maximum 3D texture height."""
229 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 24m
231 @property
232 def maximum_texture3d_depth(self) -> int:
233 """int: Maximum 3D texture depth."""
234 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 23m
236 @property
237 def maximum_texture3d_width_alternate(self) -> int:
238 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
239 return self._get_cached_attribute( 2Qm
240 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2Qm
241 )
243 @property
244 def maximum_texture3d_height_alternate(self) -> int:
245 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
246 return self._get_cached_attribute( 2vG
247 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2vG
248 )
250 @property
251 def maximum_texture3d_depth_alternate(self) -> int:
252 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
253 return self._get_cached_attribute( 2uG
254 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2uG
255 )
257 @property
258 def maximum_texturecubemap_width(self) -> int:
259 """int: Maximum cubemap texture width or height."""
260 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2oH
262 @property
263 def maximum_texture1d_layered_width(self) -> int:
264 """int: Maximum 1D layered texture width."""
265 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2dH
267 @property
268 def maximum_texture1d_layered_layers(self) -> int:
269 """int: Maximum layers in a 1D layered texture."""
270 return self._get_cached_attribute( 2qG
271 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2qG
272 )
274 @property
275 def maximum_texture2d_layered_width(self) -> int:
276 """int: Maximum 2D layered texture width."""
277 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2iH
279 @property
280 def maximum_texture2d_layered_height(self) -> int:
281 """int: Maximum 2D layered texture height."""
282 return self._get_cached_attribute( 2sG
283 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2sG
284 )
286 @property
287 def maximum_texture2d_layered_layers(self) -> int:
288 """int: Maximum layers in a 2D layered texture."""
289 return self._get_cached_attribute( 2Om
290 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Om
291 )
293 @property
294 def maximum_texturecubemap_layered_width(self) -> int:
295 """int: Maximum cubemap layered texture width or height."""
296 return self._get_cached_attribute( 2Rm
297 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2Rm
298 )
300 @property
301 def maximum_texturecubemap_layered_layers(self) -> int:
302 """int: Maximum layers in a cubemap layered texture."""
303 return self._get_cached_attribute( 2wG
304 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2wG
305 )
307 @property
308 def maximum_surface1d_width(self) -> int:
309 """int: Maximum 1D surface width."""
310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2`G
312 @property
313 def maximum_surface2d_width(self) -> int:
314 """int: Maximum 2D surface width."""
315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2}G
317 @property
318 def maximum_surface2d_height(self) -> int:
319 """int: Maximum 2D surface height."""
320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2{G
322 @property
323 def maximum_surface3d_width(self) -> int:
324 """int: Maximum 3D surface width."""
325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2bH
327 @property
328 def maximum_surface3d_height(self) -> int:
329 """int: Maximum 3D surface height."""
330 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2aH
332 @property
333 def maximum_surface3d_depth(self) -> int:
334 """int: Maximum 3D surface depth."""
335 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2~G
337 @property
338 def maximum_surface1d_layered_width(self) -> int:
339 """int: Maximum 1D layered surface width."""
340 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 21m
342 @property
343 def maximum_surface1d_layered_layers(self) -> int:
344 """int: Maximum layers in a 1D layered surface."""
345 return self._get_cached_attribute( 2nG
346 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2nG
347 )
349 @property
350 def maximum_surface2d_layered_width(self) -> int:
351 """int: Maximum 2D layered surface width."""
352 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2|G
354 @property
355 def maximum_surface2d_layered_height(self) -> int:
356 """int: Maximum 2D layered surface height."""
357 return self._get_cached_attribute( 2oG
358 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2oG
359 )
361 @property
362 def maximum_surface2d_layered_layers(self) -> int:
363 """int: Maximum layers in a 2D layered surface."""
364 return self._get_cached_attribute( 2Mm
365 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2Mm
366 )
368 @property
369 def maximum_surfacecubemap_width(self) -> int:
370 """int: Maximum cubemap surface width."""
371 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2cH
373 @property
374 def maximum_surfacecubemap_layered_width(self) -> int:
375 """int: Maximum cubemap layered surface width."""
376 return self._get_cached_attribute( 2Nm
377 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2Nm
378 )
380 @property
381 def maximum_surfacecubemap_layered_layers(self) -> int:
382 """int: Maximum layers in a cubemap layered surface."""
383 return self._get_cached_attribute( 2pG
384 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2pG
385 )
387 @property
388 def max_registers_per_block(self) -> int:
389 """int: Maximum number of 32-bit registers available to a thread block."""
390 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2Zm
392 @property
393 def clock_rate(self) -> int:
394 """int: Typical clock frequency in kilohertz."""
395 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2-fqn6Ijb*n3
397 @property
398 def texture_alignment(self) -> int:
399 """int: Alignment requirement for textures."""
400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2GH
402 @property
403 def texture_pitch_alignment(self) -> int:
404 """int: Pitch alignment requirement for textures."""
405 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2HH
407 @property
408 def gpu_overlap(self) -> bool:
409 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
410 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2$G
412 @property
413 def multiprocessor_count(self) -> int:
414 """int: Number of multiprocessors on device."""
415 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2xH+m
417 @property
418 def kernel_exec_timeout(self) -> bool:
419 """bool: Specifies whether there is a run time limit on kernels."""
420 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2On
422 @property
423 def integrated(self) -> bool:
424 """bool: Device is integrated with host memory."""
425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2*G
427 @property
428 def can_map_host_memory(self) -> bool:
429 """bool: Device can map host memory into CUDA address space."""
430 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 20G
432 @property
433 def compute_mode(self) -> int:
434 """int: Compute mode (See CUcomputemode for details)."""
435 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 27I
437 @property
438 def concurrent_kernels(self) -> bool:
439 """bool: Device can possibly execute multiple kernels concurrently."""
440 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 24G
442 @property
443 def ecc_enabled(self) -> bool:
444 """bool: Device has ECC support enabled."""
445 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 28G
447 @property
448 def pci_bus_id(self) -> int:
449 """int: PCI bus ID of the device."""
450 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2BH
452 @property
453 def pci_device_id(self) -> int:
454 """int: PCI device ID of the device."""
455 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2CH
457 @property
458 def pci_domain_id(self) -> int:
459 """int: PCI domain ID of the device."""
460 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2DH
462 @property
463 def tcc_driver(self) -> bool:
464 """bool: Device is using TCC driver model."""
465 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2FH
467 @property
468 def memory_clock_rate(self) -> int:
469 """int: Peak memory clock frequency in kilohertz."""
470 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 28I
472 @property
473 def global_memory_bus_width(self) -> int:
474 """int: Global memory bus width in bits."""
475 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2!G
477 @property
478 def l2_cache_size(self) -> int:
479 """int: Size of L2 cache in bytes."""
480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2,G
482 @property
483 def max_threads_per_multiprocessor(self) -> int:
484 """int: Maximum resident threads per multiprocessor."""
485 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2_GAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F
487 @property
488 def unified_addressing(self) -> bool:
489 """bool: Device shares a unified address space with the host."""
490 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a JH
492 @property
493 def compute_capability_major(self) -> int:
494 """int: Major compute capability version number."""
495 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEh2Gjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f
497 @property
498 def compute_capability_minor(self) -> int:
499 """int: Minor compute capability version number."""
500 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEh3Gjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f
502 @property
503 def global_l1_cache_supported(self) -> bool:
504 """bool: Device supports caching globals in L1."""
505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 29G
507 @property
508 def local_l1_cache_supported(self) -> bool:
509 """bool: Device supports caching locals in L1."""
510 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2-G
512 @property
513 def max_shared_memory_per_multiprocessor(self) -> int:
514 """int: Maximum shared memory available per multiprocessor in bytes."""
515 return self._get_cached_attribute( 2mGAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F
516 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2mGAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F
517 )
519 @property
520 def max_registers_per_multiprocessor(self) -> int:
521 """int: Maximum number of 32-bit registers available per multiprocessor."""
522 return self._get_cached_attribute( 2kGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F
523 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2kGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F
524 )
526 @property
527 def managed_memory(self) -> bool:
528 """bool: Device can allocate managed memory on this system."""
529 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2igjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg.G
531 @property
532 def multi_gpu_board(self) -> bool:
533 """bool: Device is on a multi-GPU board."""
534 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2uH
536 @property
537 def multi_gpu_board_group_id(self) -> int:
538 """int: Unique id for a group of devices on the same multi-GPU board."""
539 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2vH
541 @property
542 def host_native_atomic_supported(self) -> bool:
543 """bool: Link between the device and the host supports all native atomic operations."""
544 return bool( 2hG
545 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2hG
546 )
548 @property
549 def single_to_double_precision_perf_ratio(self) -> int:
550 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
551 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 29I
553 @property
554 def pageable_memory_access(self) -> bool:
555 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2AH
558 @property
559 def concurrent_managed_access(self) -> bool:
560 """bool: Device can coherently access managed memory concurrently with the CPU."""
561 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2#i=f?f@f[f]f^fWo#F$F%F'F(F)Figjgkglgmgngogpgqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg5G3 EgFgGg_f/fepXoYoZo+nfpgp!m)mhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;Fsp9o
563 @property
564 def compute_preemption_supported(self) -> bool:
565 """bool: Device supports compute preemption."""
566 return bool( 2aG
567 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2aG
568 )
570 @property
571 def can_use_host_pointer_for_registered_mem(self) -> bool:
572 """bool: Device can access host registered memory at the same virtual address as the CPU."""
573 return bool( 2ym
574 self._get_cached_attribute( 2ym
575 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2ym
576 )
577 )
579 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
581 @property
582 def cooperative_launch(self) -> bool:
583 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
584 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 26G+m
586 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
588 @property
589 def max_shared_memory_per_block_optin(self) -> int:
590 """int: Maximum optin shared memory per block."""
591 return self._get_cached_attribute( 2lG
592 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2lG
593 )
595 @property
596 def pageable_memory_access_uses_host_page_tables(self) -> bool:
597 """bool: Device accesses pageable memory via the host's page tables."""
598 return bool( 2_F
599 self._get_cached_attribute( 2_F
600 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2_F
601 )
602 )
604 @property
605 def direct_managed_mem_access_from_host(self) -> bool:
606 """bool: The host can directly access managed memory on the device without migration."""
607 return bool( 2]F
608 self._get_cached_attribute( 2]F
609 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2]F
610 )
611 )
613 @property
614 def virtual_memory_management_supported(self) -> bool:
615 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
616 return bool( 2`F0c`e`fut{e{fstYe;f
617 self._get_cached_attribute( 2`F0c`e`fut{e{fstYe;f
618 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2`F0c`e`fut{e{fstYe;f
619 )
620 )
622 @property
623 def handle_type_posix_file_descriptor_supported(self) -> bool:
624 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
625 return bool( 2) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b^F_b-b.b/bm n 1 2
626 self._get_cached_attribute( 2) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b^F_b-b.b/bm n 1 2
627 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b^F_b-b.b/bm n 1 2
628 )
629 )
631 @property
632 def handle_type_win32_handle_supported(self) -> bool:
633 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
634 return bool( 2eG
635 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2eG
636 )
638 @property
639 def handle_type_win32_kmt_handle_supported(self) -> bool:
640 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
641 return bool( 2Bm
642 self._get_cached_attribute( 2Bm
643 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2Bm
644 )
645 )
647 @property
648 def max_blocks_per_multiprocessor(self) -> int:
649 """int: Maximum number of blocks per multiprocessor."""
650 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2Xm
652 @property
653 def generic_compression_supported(self) -> bool:
654 """bool: Device supports compression of memory."""
655 return bool( 2bG
656 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2bG
657 )
659 @property
660 def max_persisting_l2_cache_size(self) -> int:
661 """int: Maximum L2 persisting lines capacity setting in bytes."""
662 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2[G
664 @property
665 def max_access_policy_window_size(self) -> int:
666 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
667 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2/G
669 @property
670 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
671 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
672 return bool( 2Am
673 self._get_cached_attribute( 2Am
674 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2Am
675 )
676 )
678 @property
679 def reserved_shared_memory_per_block(self) -> int:
680 """int: Shared memory reserved by CUDA driver per block in bytes."""
681 return self._get_cached_attribute( 2yG
682 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2yG
683 )
685 @property
686 def sparse_cuda_array_supported(self) -> bool:
687 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
688 return bool( 2Sm
689 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2Sm
690 )
692 @property
693 def read_only_host_register_supported(self) -> bool:
694 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
695 return bool( 2xG
696 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2xG
697 )
699 @property
700 def memory_pools_supported(self) -> bool:
701 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
702 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2#iJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]r^r_r`r{r|r}r~rasQGRGSGTGUGVGcg=f+i7f8f,iPe-i.i/i:i;idg?f=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@fhj#f$fijRejjkjljmjnjfg[foj%f'fpjSeqjrjsjtjujgg]fvj(f)fwjTexjyjzjAjBjhg^fCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jWGXGesktlt^q_q`q`o%m'mmtntot{o|o}opt~oapbpcpqtrtdprs1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j)nWo) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bsHEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;Fiksp.n9ojkkk:fXelk_b-b.bmk/bnkokpkqkrksktkukvkwkZeJgKgwixkykzk0exiyiAkBkR S T U V CkDkEkFkGkFhGhHhIhJhHkIkJkKkLkzi1eLgMgAiMkNkOk2eBiCiPkQkNgOgPgQgRg3eSgTgRkSkTkDiEiUkVkWkXkYkZk0k`b{b|b}b~b5e6e7e1k2k3k4k5k8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kacbcccdcec)k*k+k,k-kKhLhMhNhOhGiHiIiJiKi$eYgZgLi.k/k:k%eMiNi;k=kW X Y Z 0 ?k@k[k]k^kPhQhRhShTh_k`k{k|k}kOi'e0g1gPi~kalbl(eQiRicldl2g3g4g5g6g)e7g8gelflglSiTihliljlklllmlnlfcgchcicjc+e,e-eolplqlrlsl.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkclcmcncocDlElFlGlHlUhVhWhXhYhm n 1 2 IlJlKlLlMlViWiXiYiZiNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*m
704 @property
705 def gpu_direct_rdma_supported(self) -> bool:
706 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
707 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2#GYe;f
709 @property
710 def gpu_direct_rdma_flush_writes_options(self) -> int:
711 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
712 return self._get_cached_attribute( 2cG
713 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2cG
714 )
716 @property
717 def gpu_direct_rdma_writes_ordering(self) -> int:
718 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2Wm
721 @property
722 def mempool_supported_handle_types(self) -> int:
723 """int: Handle types supported with mempool based IPC."""
724 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 25m
726 @property
727 def deferred_mapping_cuda_array_supported(self) -> bool:
728 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
729 return bool( 2zm
730 self._get_cached_attribute( 2zm
731 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2zm
732 )
733 )
735 @property
736 def numa_config(self) -> int:
737 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2yH
740 @property
741 def numa_id(self) -> int:
742 """int: NUMA node ID of the GPU memory."""
743 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2zH
745 @property
746 def multicast_supported(self) -> bool:
747 """bool: Device supports switch multicast and reduction operations."""
748 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2wH
750 @property
751 def surface_alignment(self) -> int:
752 """int: Surface alignment requirement in bytes."""
753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2EH
755 @property
756 def async_engine_count(self) -> int:
757 """int: Number of asynchronous engines."""
758 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2YG
760 @property
761 def can_tex2d_gather(self) -> bool:
762 """bool: True if device supports 2D texture gather operations, False if not."""
763 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Um
765 @property
766 def maximum_texture2d_gather_width(self) -> int:
767 """int: Maximum 2D texture gather width."""
768 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2gH
770 @property
771 def maximum_texture2d_gather_height(self) -> int:
772 """int: Maximum 2D texture gather height."""
773 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2fH
775 @property
776 def stream_priorities_supported(self) -> bool:
777 """bool: True if device supports stream priorities, False if not."""
778 return bool( 2Tm
779 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Tm
780 )
782 @property
783 def can_flush_remote_writes(self) -> bool:
784 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
785 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2ZG
787 @property
788 def host_register_supported(self) -> bool:
789 """bool: Device supports host memory registration via cudaHostRegister."""
790 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2)G
792 @property
793 def timeline_semaphore_interop_supported(self) -> bool:
794 """bool: External timeline semaphore interop is supported on the device."""
795 return bool( 2Fm
796 self._get_cached_attribute( 2Fm
797 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Fm
798 )
799 )
801 @property
802 def cluster_launch(self) -> bool:
803 """bool: Indicates device supports cluster launch."""
804 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 21G
806 @property
807 def can_use_64_bit_stream_mem_ops(self) -> bool:
808 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
809 return bool( 2~F
810 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2~F
811 )
813 @property
814 def can_use_stream_wait_value_nor(self) -> bool:
815 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
816 return bool( 2Lm
817 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2Lm
818 )
820 @property
821 def dma_buf_supported(self) -> bool:
822 """bool: Device supports buffer sharing with dma_buf mechanism."""
823 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Vm
825 # Start of CUDA 12 device attributes
827 @property
828 def ipc_event_supported(self) -> bool:
829 """bool: Device supports IPC Events."""
830 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2+G
832 @property
833 def mem_sync_domain_count(self) -> int:
834 """int: Number of memory domains the device supports."""
835 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2rH
837 @property
838 def tensor_map_access_supported(self) -> bool:
839 """bool: Device supports accessing memory using Tensor Map."""
840 return bool( 2zG^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDh
841 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2zG^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDh
842 )
844 @property
845 def handle_type_fabric_supported(self) -> bool:
846 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
847 return bool( 2dG
848 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2dG
849 )
851 @property
852 def unified_function_pointers(self) -> bool:
853 """bool: Device supports unified function pointers."""
854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2KH
856 @property
857 def mps_enabled(self) -> bool:
858 """bool: Indicates if contexts created on this device will be shared via MPS."""
859 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2tH
861 @property
862 def host_numa_id(self) -> int:
863 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
864 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2#F$F'F(Fo p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l (G+nckHgdkekfkgkaghkf wnTn
866 @property
867 def d3d12_cig_supported(self) -> bool:
868 """bool: Device supports CIG with D3D12."""
869 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 27G
871 @property
872 def mem_decompress_algorithm_mask(self) -> int:
873 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2pH
876 @property
877 def mem_decompress_maximum_length(self) -> int:
878 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
879 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2qH
881 @property
882 def vulkan_cig_supported(self) -> bool:
883 """bool: Device supports CIG with Vulkan."""
884 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 26m
886 @property
887 def gpu_pci_device_id(self) -> int:
888 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
890 Returns 0 if the driver does not support this query.
891 """
892 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2%G
894 @property
895 def gpu_pci_subsystem_id(self) -> int:
896 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
898 Returns 0 if the driver does not support this query.
899 """
900 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2'G
902 @property
903 def host_numa_virtual_memory_management_supported(self) -> bool:
904 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
905 return bool( 2Cm
906 self._get_cached_attribute( 2Cm
907 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Cm
908 )
909 )
911 @property
912 def host_numa_memory_pools_supported(self) -> bool:
913 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
914 return bool( 2FsGsqn3nHIIIJIKIDtLI~qarbrHs4nEtttFtiGHgagf
915 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2FsGsqn3nHIIIJIKIDtLI~qarbrHs4nEtttFtiGHgagf
916 )
918 # Start of CUDA 13 device attributes
920 @property
921 def host_numa_multinode_ipc_supported(self) -> bool:
922 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
923 return bool( 2jG
924 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2jG
925 )
927 @property
928 def host_memory_pools_supported(self) -> bool:
929 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
930 IF CUDA_CORE_BUILD_MAJOR < 13:
931 return False
932 ELSE:
933 return bool( 2#iNno p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l gG8mmpckPnHgnpdkopekppfkqpgkQnagrphktpRnXeSn?KGmf kb=FwnTnQF
934 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2#iNno p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l gG8mmpckPnHgnpdkopekppfkqpgkQnagrphktpRnXeSn?KGmf kb=FwnTnQF
935 )
937 @property
938 def host_virtual_memory_management_supported(self) -> bool:
939 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
940 IF CUDA_CORE_BUILD_MAJOR < 13:
941 return False
942 ELSE:
943 return bool( 2Dm
944 self._get_cached_attribute( 2Dm
945 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Dm
946 )
947 )
949 @property
950 def host_alloc_dma_buf_supported(self) -> bool:
951 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
952 IF CUDA_CORE_BUILD_MAJOR < 13:
953 return False
954 ELSE:
955 return bool( 2fG
956 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2fG
957 )
959 @property
960 def only_partial_host_native_atomic_supported(self) -> bool:
961 """bool: Link between the device and the host supports only some native atomic operations."""
962 IF CUDA_CORE_BUILD_MAJOR < 13:
963 return False
964 ELSE:
965 return bool( 2Em
966 self._get_cached_attribute( 2Em
967 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2Em
968 )
969 )
972class Device:
973 """Represent a GPU and act as an entry point for cuda.core features.
975 This is a singleton object that helps ensure interoperability
976 across multiple libraries imported in the process to both see
977 and use the same GPU device.
979 While acting as the entry point, many other CUDA resources can be
980 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
981 resource created through this device, will continue to refer to
982 this device's context.
984 Newly returned :obj:`~_device.Device` objects are thread-local singletons
985 for a specified device.
987 Note
988 ----
989 Will not initialize the GPU.
991 Parameters
992 ----------
993 device_id : int, optional
994 Device ordinal to return a :obj:`~_device.Device` object for.
995 Default value of `None` return the currently used device.
997 """
998 __slots__ = (
999 "_device_id",
1000 "_memory_resource",
1001 "_has_inited",
1002 "_properties",
1003 "_resources",
1004 "_uuid",
1005 "_context",
1006 "__weakref__",
1007 )
1009 def __new__(cls, device_id: Device | int | None = None) -> Device:
1010 if isinstance(device_id, Device): 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1wCN1jDN2jEN3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is $PGb. t cPHb/ u %PIb'P=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYndP?j)o_e.fGM@j7mXz(P[jeP]j)P^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxA:MjkvJ)pFNkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;sGNlk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b*M-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1011 return device_id 2ktlt`o%m'mmtntot{o|o}opt~oapbpcpqtrtdpCNDNEN5H/n:n;n=n?n@n[n)n) 'I* (I+ , 5p- )I$P. cP/ %P'P: ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfb*I+IgbhbibGGHG|L}L~LaMdP.fGM7m(PeP)PHMIM(m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkik.n:MFN:fGN`e{estYe*oCpDp0L$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@JwJ*MxJyJm n
1013 Device_ensure_cuda_initialized() 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1014 device_id = Device_resolve_device_id(device_id) 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1015 devices = Device_ensure_tls_devices(cls) 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1017 try: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1018 return devices[device_id] 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1019 except IndexError: 2DMEM
1020 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2DMEM
1022 def _check_context_initialized(self) -> None:
1023 if not self._has_inited: 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~ras7f8f9f!f#f$f%f'f(f)f*f+fesNIMHOIPIdLeL2K^qUJVJWJ_qXJ3K4K`q5K`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL6K7K8K9K1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohooOiojogPkohPlomoiPnopOoopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWIEOFOGOHOIOJOKOLOMONOOOPOQORO-fSOqnTO5M6M7M8M9M!M#M$MKNjPkPUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPGLHLILJLKLLL#m$m!KML9m7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxP!H7ntnwtGI3 +m-IVnun8nmIZI9n!nWnXn:h;hyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!m(m)m8m:MFN1n#PGmf kbGN(n!J#JbgHmIm(M[l+por]lpr,p-p.pqr^lrr_lsr/p:p;ptrJgKgR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbub=p?pFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCremDr@p[p]pErLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquqKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrfm;ovqwqxqOrYgZgW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbyqzqPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrpmYrAqBqCqZr0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4qUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8rm n 1 2 qm9r5q6q7q!rrm_o8q9q!q#rsm$r#q$q%q%rtm'r'q(q)q(rum)r*q+q,q*rvm+r-q.q/q,rwm-r:q;q=q.rxm/r?q@q[q:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:LfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFI|J,K-K.K}J/KkJlJGtmJnJVISKoJHtpJItqJrJsJtJTKxnZH0H
1024 raise CUDAError(
1025 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
1026 )
1027 Context_check_open(self._context) 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~ras7f8f9f!f#f$f%f'f(f)f*f+fesNIMHOIPIdLeL2K^qUJVJWJ_qXJ3K4K`q5K`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL6K7K8K9K1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohooOiojogPkohPlomoiPnopOoopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWIEOFOGOHOIOJOKOLOMONOOOPOQORO-fSOqnTO5M6M7M8M9M!M#M$MKNjPkPUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPGLHLILJLKLLL#m$m!KML9m7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxP!H7ntnwtGI3 +m-IVnun8nmIZI9n!nWnXn:h;hyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!m(m)m8m:MFN1n#PGmf kbGN(n!J#JbgHmIm(M[l+por]lpr,p-p.pqr^lrr_lsr/p:p;ptrJgKgR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbub=p?pFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCremDr@p[p]pErLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquqKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrfm;ovqwqxqOrYgZgW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbyqzqPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrpmYrAqBqCqZr0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4qUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8rm n 1 2 qm9r5q6q7q!rrm_o8q9q!q#rsm$r#q$q%q%rtm'r'q(q)q(rum)r*q+q,q*rvm+r-q.q/q,rwm-r:q;q=q.rxm/r?q@q[q:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:LfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFI|J,K-K.K}J/KkJlJGtmJnJVISKoJHtpJItqJrJsJtJTKxnZH0H
1030 @classmethod
1031 def get_all_devices(cls) -> tuple[Device, ...]:
1032 """
1033 Query the available device instances.
1035 Returns
1036 -------
1037 tuple of Device
1038 A tuple containing instances of available devices.
1039 """
1040 return cls._get_all_devices_from_cuda_driver() 2Is,fKsLsMs@F%M'M+M[F|I1H~IaJbJcJdJ~J:h;heJ)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtet$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J;oft_ogt*maKbKcKdKhtiOjOkOitjt
1042 @classmethod
1043 def _get_all_devices_from_cuda_driver(cls):
1044 Device_ensure_cuda_initialized() 2Is,fKsLsMs@F%M'M+M[F|I1H~IaJbJcJdJ~J:h;heJ)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtet$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J;oft_ogt*maKbKcKdKhtiOjOkOitjt
1045 return tuple(Device_ensure_tls_devices(cls)) 2Is,fKsLsMs@F%M'M+M[F|I1H~IaJbJcJdJ~J:h;heJ)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtet$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J;oft_ogt*maKbKcKdKhtiOjOkOitjt
1047 def to_system_device(self) -> 'cuda.core.system.Device':
1048 """
1049 Get the corresponding :class:`cuda.core.system.Device` (which is used
1050 for NVIDIA Management Library (NVML) access) for this
1051 :class:`cuda.core.Device` (which is used for CUDA access).
1053 The devices are mapped to one another by their UUID.
1055 Returns
1056 -------
1057 cuda.core.system.Device
1058 The corresponding system-level device instance used for NVML access.
1059 """
1060 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2@F%M'M[FIG
1062 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2@F%M'M[FIG
1063 raise RuntimeError(
1064 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x"
1065 )
1067 from cuda.core.system import Device as SystemDevice 2@F%M'M[FIG
1068 return SystemDevice(uuid=self.uuid) 2@F%M'M[FIG
1070 @property
1071 def device_id(self) -> int:
1072 """Return device ordinal."""
1073 return self._device_id 2JtKtcg=fdg?feg@ffg[fgg]fhg^fktlt`o%m'm{q|qvnmtntot{o|o}opt~oapbpcpqtrtdpCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK=LiQ6H7H)n0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h%F|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I)FqOrObMXM9F=IuJjQsOtOuOvOwOYMxOyOJs) ,M'I* (Ijr+ Fs?I, Gs5p- )I$P. cP/ %P'P-f: rn; = ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMabkrbb~q)McbarlrdbbrmrebHs}Ffb*I+I[Igb]IhbnribGGHG|L}L~LaMEh#m$m1HXImKYI!H7ntnwtZM:h;hdP_e.fGM7m(PeP)PHMIMhM/fZo(m)m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkik.n:MFN:fGN!J#J0c`e{estYe0LupvpiMjMbgHmImRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@JwJ_b*MxJyJ[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliJMKMm n qmrmsmtmumvmwmxmUI;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihirisi!iti3IkQ4I0H5I
1075 @property
1076 def pci_bus_id(self) -> str:
1077 """Return a PCI Bus Id string for this device."""
1078 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2+MmKIG
1079 return bus_id[:12].decode() 2+MmKIG
1081 def can_access_peer(self, peer: Device | int) -> bool:
1082 """Check if this device can access memory from the specified peer device.
1084 Queries whether peer-to-peer memory access is supported between this
1085 device and the specified peer device.
1087 Parameters
1088 ----------
1089 peer : Device | int
1090 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1091 """
1092 peer = Device(peer)
1093 cdef int d1 = <int> self.device_id
1094 cdef int d2 = <int> peer.device_id
1095 if d1 == d2:
1096 return True
1097 cdef int value = 0
1098 with nogil:
1099 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1100 return bool(value)
1102 @property
1103 def uuid(self) -> str:
1104 """Return a UUID for the device.
1106 Returns 16-octets identifying the device. If the device is in
1107 MIG mode, returns its MIG UUID which uniquely identifies the
1108 subscribed MIG compute instance.
1110 Note
1111 ----
1112 MIG UUID is only returned when device is in MIG mode and the
1113 driver is older than CUDA 11.4.
1115 The UUID is cached after first access to avoid repeated CUDA API calls.
1117 """
1118 cdef cydriver.CUuuid uuid
1119 cdef cydriver.CUdevice dev
1120 cdef bytes uuid_b
1121 cdef str uuid_hex
1123 if self._uuid is None: 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F%M'M+M[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1124 dev = self._device_id 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1125 with nogil: 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1126 IF CUDA_CORE_BUILD_MAJOR == 12:
1127 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1128 ELSE: # 13.0+
1129 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1130 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1131 uuid_hex = uuid_b.hex() 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1132 # 8-4-4-4-12
1133 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1134 return self._uuid 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F%M'M+M[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1136 @property
1137 def name(self) -> str:
1138 """Return the device name."""
1139 # Use 256 characters to be consistent with CUDA Runtime
1140 cdef int LENGTH = 256 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1141 cdef bytes name = bytes(LENGTH) 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1142 cdef char* name_ptr = name 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1143 cdef cydriver.CUdevice this_dev = self._device_id 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1144 with nogil: 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1145 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1146 name = name.split(b"\0")[0] 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1147 return name.decode() 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN
1149 @property
1150 def properties(self) -> DeviceProperties:
1151 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1152 if self._properties is None: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEh}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
1153 self._properties = DeviceProperties._init(self._device_id) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
1155 return self._properties 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEh}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh
1157 @property
1158 def resources(self) -> DeviceResources:
1159 """Return the hardware resource query namespace for this device."""
1160 if self._resources is None: 2Ns*lOs+lk VeWe,l-l.l/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's@l(s
1161 self._resources = DeviceResources._init(self._device_id) 2Ns*lOs+lk VeWe,l-l.l/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's@l(s
1162 return self._resources 2Ns*lOs+lk VeWe,l-l.l/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's@l(s
1164 @property
1165 def compute_capability(self) -> ComputeCapability:
1166 """Return a named tuple with 2 fields: major and minor."""
1167 cdef DeviceProperties prop = self.properties 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo5H/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p3f4f5f6f
1168 cached = prop._cache.get("compute_capability") 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo5H/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p3f4f5f6f
1169 if cached is not None: 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo5H/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p3f4f5f6f
1170 return cached 2a 5H/n:n;n=n?n@n[n!o#o$oDg2nk VeWe+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*H+H8b9b,H-H!b.H/H:H;H=H?H@H[H]H^H_H`H#b{H$b|H%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2db c lbmb3d4d4 5 `b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4e(d)dac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dnbob!e[d#e]dd e pbqb^d_d! # fc`d{dgc$ % hc|d}d~daebeicjccedeee*efegekcheielc' ( mcjekelemeneoencocpeqererbsbseteuevewexeye:eze;eAeBeCeDeEeFeGeHeIeJeKeLeMeNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p
1171 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f
1172 return prop._cache.setdefault("compute_capability", cc) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f
1174 @property
1175 def arch(self) -> str:
1176 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1177 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a 5H/n:n;n=n?n@n[n!o#o$oDg2nk VeWe-Isc9JtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2db c lbmb3d4d4 5 `b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd(d)dac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dnbob[d]dd e pbqb^d_d! # fc`d{dgc$ % hc|d}d~daebeicjccedeeefegekcheielc' ( mcjekelemeneoencocpeqererbsbseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p
1179 @property
1180 def context(self) -> Context:
1181 """Return the :obj:`~_context.Context` associated with this device.
1183 Note
1184 ----
1185 Device must be initialized.
1187 """
1188 self._check_context_initialized() 29mwtprsrFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrDr-oEp;oPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrYr@oFp9r_o$r'r)r+r-r/rUI
1189 return self._context 29mwtprsrFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrDr-oEp;oPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrYr@oFp9r_o$r'r)r+r-r/rUI
1191 @property
1192 def memory_resource(self) -> MemoryResource:
1193 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1194 cdef int attr, device_id
1195 if self._memory_resource is None: 26H7H0h1h2h8H9H+P3h,P4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I3I4I0H5I
1196 # If the device is in TCC mode, or does not support memory pools for some other reason,
1197 # use the SynchronousMemoryResource which does not use memory pools.
1198 device_id = self._device_id 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I
1199 with nogil: 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I
1200 HANDLE_RETURN( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I
1201 cydriver.cuDeviceGetAttribute( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I
1202 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1203 )
1204 )
1205 if attr == 1: 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I
1206 from cuda.core._memory import DeviceMemoryResource 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt_h`h{h0i1i2i|h}h~h3iai4i5ibicidi6iei7i8i9ifigihi!i3I4I0H5I
1207 self._memory_resource = DeviceMemoryResource(self._device_id) 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt_h`h{h0i1i2i|h}h~h3iai4i5ibicidi6iei7i8i9ifigihi!i3I4I0H5I
1208 else:
1209 from cuda.core._memory._synchronous_memory_resource import ( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbg[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h|h}hni~haioipibicidieiqifigihirisiti3I4I0H5I
1210 _SynchronousMemoryResource,
1211 )
1212 self._memory_resource = _SynchronousMemoryResource( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbg[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h|h}hni~haioipibicidieiqifigihirisiti3I4I0H5I
1213 self._device_id, self._context) 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbg[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h|h}hni~haioipibicidieiqifigihirisiti3I4I0H5I
1215 return self._memory_resource 26H7H0h1h2h8H9H+P3h,P4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I3I4I0H5I
1217 @memory_resource.setter
1218 def memory_resource(self, mr: MemoryResource) -> None:
1219 from cuda.core._memory import MemoryResource
1220 assert_type(mr, MemoryResource)
1221 self._memory_resource = mr
1223 @property
1224 def default_stream(self) -> Stream:
1225 """Return a default CUDA :obj:`~_stream.Stream` token.
1227 The type of default stream returned depends on if the environment
1228 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1230 If set, returns a per-thread default stream. Otherwise returns
1231 the legacy stream.
1233 A default-stream token uses the device that is current when the token
1234 is used.
1236 """
1237 return default_stream() 2ktlt`o%m'mmtntot{o|o}opt~oapbpcpqtrtdp)nWoNnlQ|f}f~fzOAOBOCODO'I(IjrFs?IGs5p)IcPmQnQrn3noQcMpQdMqQeMrQfMsQ@ItQgMuQHIIIvQwQJIKIxQyQDtLIzQkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFtGGHG|L}L~LaM#m$m%o'o#H$H%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,b(o:h;hdP)o_e.f7meP/fXo!mBp(m)m8m,nui-nvi6o8oPnHgQnag.n9oRn:M:fXeSnGmf kb[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hlim n qmrmsmtmumvmwmxmkMvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I3I4I0H5I
1239 def __int__(self) -> int:
1240 """Return device_id."""
1241 return self._device_id 2;M=M?M=L#m$m
1243 def __repr__(self) -> str:
1244 return f"<Device {self._device_id} ({self.name})>" 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nBN
1246 def __hash__(self) -> int:
1247 return hash(self.uuid) 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b4J}I5J6J{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M
1249 def __eq__(self, other: object) -> bool:
1250 if not isinstance(other, Device): 29F=I) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bBM}ICMFM{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn-b.b/b*P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQm n 1 2 -M.MRKSKxn
1251 return NotImplemented 29F=IFM*P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQRK
1252 return self._device_id == other._device_id 29F) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bBM}ICM{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn-b.b/b*Pm n 1 2 -M.MSKxn
1254 def __reduce__(self) -> tuple[object, ...]:
1255 return Device, (self.device_id,) 2Js,M'I(IjrFs?IGs5p)I-frncMdMeMfM@IgMkr~q)MarlrbrmrHs}F*I+I[I]InrGGHG|L}L~LaMJMKM
1257 def set_current(self, ctx: Context | None = None) -> Context | None:
1258 """Set device to be used for GPU executions.
1260 Initializes CUDA and sets the calling thread to a valid CUDA
1261 context. By default the primary context is used, but optional `ctx`
1262 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1264 Providing a `ctx` causes the previous set context to be popped and returned.
1266 If `ctx` was created on a different device than this receiver, the call
1267 is delegated to that device's own :meth:`set_current`. This keeps the
1268 owning device's bookkeeping consistent and lets a context this method
1269 handed out for a foreign device be pushed back through any ``Device``
1270 object, matching the CUDA context stack's own thread-wide semantics.
1272 Parameters
1273 ----------
1274 ctx : :obj:`~_context.Context`, optional
1275 Optional context to push onto this device's current thread stack.
1277 Returns
1278 -------
1279 :obj:`~_context.Context`, optional
1280 The previous context, or ``None`` if no context was current. When
1281 returned, its ``device_id`` identifies the device that was
1282 previously current.
1284 Examples
1285 --------
1286 Acts as an entry point of this object. Users always start a code by
1287 calling this method, e.g.
1289 >>> from cuda.core import Device
1290 >>> dev0 = Device(0)
1291 >>> dev0.set_current()
1292 >>> # ... do work on device 0 ...
1294 """
1295 cdef ContextHandle h_context
1296 cdef cydriver.CUcontext prev_ctx, curr_ctx
1297 cdef cydriver.CUdevice prev_dev
1298 cdef Context prev_owned = None 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe:K,l-l.lMywt/l:l;K;l=lGI?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy=K@l;L(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1300 if ctx is not None: 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe:K,l-l.lMywt/l:l;K;l=lGI?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy=K@l;L(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1301 # TODO: revisit once Context is cythonized
1302 assert_type(ctx, Context) 2:Kwt;KGI=K;L
1303 Context_check_open(ctx) 2:Kwt;KGI=K;L
1304 if ctx._device_id != self._device_id: 2:Kwt;KGI=K
1305 # The CUDA context stack is per-thread, not per-Device-object,
1306 # so pushing/popping a foreign-device context is delegated to
1307 # the device that owns it; its own bookkeeping (_context,
1308 # _has_inited) is what should track this push, not ours.
1309 return Device(ctx._device_id).set_current(ctx)
1310 if self._has_inited and self._context is not None: 2:Kwt;KGI=K
1311 prev_owned = self._context 2:Kwt;KGI=K
1312 curr_ctx = as_cu(ctx._h_context) 2:Kwt;KGI=K
1313 prev_ctx = NULL 2:Kwt;KGI=K
1314 with nogil: 2:Kwt;KGI=K
1315 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&prev_ctx)) 2:Kwt;KGI=K
1316 if prev_ctx != NULL: 2:Kwt;KGI=K
1317 HANDLE_RETURN(cydriver.cuCtxGetDevice(&prev_dev)) 2:Kwt;KGI=K
1318 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2:Kwt;KGI=K
1319 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2:Kwt;KGI=K
1320 self._has_inited = True 2:Kwt;KGI=K
1321 self._context = ctx # Store owning context reference 2:Kwt;KGI=K
1322 if prev_ctx != NULL: 2:Kwt;KGI=K
1323 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2:Kwt;KGI=K
1324 return prev_owned 2:Kwt;KGI=K
1325 return Context._from_handle( 2wt
1326 Context, create_context_handle_ref(prev_ctx), <int>prev_dev) 2wt
1327 else:
1328 # use primary ctx
1329 h_context = get_primary_context(self._device_id) 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1330 if h_context.get() == NULL: 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1331 HANDLE_RETURN(get_last_error())
1332 raise RuntimeError(
1333 f"Failed to retain the primary context for device {self._device_id}"
1334 )
1335 with nogil: 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1336 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1337 self._has_inited = True 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1338 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF
1340 def create_context(self, options: ContextOptions | None = None) -> Context:
1341 """Create a new :obj:`~_context.Context` object.
1343 Note
1344 ----
1345 The newly created context will not be set as current.
1347 Parameters
1348 ----------
1349 options : :obj:`~_context.ContextOptions`, optional
1350 Customizable dataclass for context creation options.
1352 Returns
1353 -------
1354 :obj:`~_context.Context`
1355 Newly created context object.
1357 """
1358 cdef int i
1359 cdef object resources
1360 cdef object res
1361 cdef SMResource sm_res
1362 cdef WorkqueueResource wq_res
1364 if options is None: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWMbP@l;L
1365 raise ValueError( 2bP
1366 "options with device resources must be provided to create a green context"
1367 )
1369 options = check_or_create_options(ContextOptions, options, "Context options") 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWMbP@l;L
1370 if options.resources is None: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWMbP@l;L
1371 raise ValueError( 2bP
1372 "ContextOptions.resources must be provided to create a green context"
1373 )
1375 resources = tuple(options.resources) 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1376 if len(resources) == 0: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1377 raise ValueError("ContextOptions.resources must not be empty")
1379 cdef vector[cydriver.CUdevResource] c_resources
1380 c_resources.resize(len(resources)) 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1382 for i, res in enumerate(resources): 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1383 if isinstance(res, SMResource): 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1384 sm_res = <SMResource>res 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1385 if not sm_res._is_usable: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L
1386 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2/M
1387 c_resources[i] = sm_res._resource 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L
1388 elif isinstance(res, WorkqueueResource): 2tn
1389 wq_res = <WorkqueueResource>res 2tn
1390 c_resources[i] = wq_res._wq_config_resource 2tn
1391 else:
1392 raise TypeError(f"Unsupported context resource type: {type(res)}")
1394 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L
1395 c_resources.data(),
1396 <unsigned int>(c_resources.size()),
1397 <cydriver.CUdevice>(self._device_id), 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L
1398 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1399 )
1400 if h_green.get() == NULL: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L
1401 HANDLE_RETURN(get_last_error())
1402 raise RuntimeError("Failed to create CUDA green context")
1404 return Context._from_green_ctx(Context, h_green, self._device_id) 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L
1406 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream:
1407 """Create or wrap a :obj:`~_stream.Stream` object.
1409 New stream objects can be created in two different ways:
1411 1) Create a new CUDA stream with customizable ``options``.
1412 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1414 Option (2) internally holds a reference to the foreign object
1415 such that the lifetime is managed.
1417 Note
1418 ----
1419 Device must be initialized. New streams are created on this device.
1421 Parameters
1422 ----------
1423 obj : :obj:`~_stream.IsStreamType`, optional
1424 Any object supporting the ``__cuda_stream__`` protocol.
1425 options : :obj:`~_stream.StreamOptions`, optional
1426 Customizable dataclass for stream creation options.
1428 Returns
1429 -------
1430 :obj:`~_stream.Stream`
1431 Newly created stream object.
1433 """
1434 self._check_context_initialized() 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasesNIMHOIPIdLeLVJWJ`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoiojogPkohPlomoiPnooopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWI-fqn5M6M7M8M9M!M#M$MKNjPkPGLHLILJLKLLLML9m7J6njbsnNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxPwt3 +m-IVnun8nmIZI9n!nWnXnyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!mFN1n#PGmGN(n!J#JbgHmIm(MorqrrrtrErKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrOrZrUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r1 2 !r#r%r(r*r,r.r:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-L.LRK/L:L;rvt_J`J{JFI}J0H
1435 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasesNIMHOIPIdLeLVJWJ`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoiojogPkohPlomoiPnooopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWI-fqn5M6M7M8M9M!M#M$MKNjPkPGLHLILJLKLLLML9m7J6njbsnNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxPwt3 +m-IVnun8nmIZI9n!nWnXnyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!mFN1n#PGmGN(n!J#JbgHmIm(MorqrrrtrErKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrOrZrUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r1 2 !r#r%r(r*r,r.r:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-L.LRK/L:L;rvt_J`J{JFI}J0H
1437 def create_event(self, options: EventOptions | None = None) -> Event:
1438 """Create an :obj:`~_event.Event` on this device without recording it to a :obj:`~_stream.Stream`.
1440 Note
1441 ----
1442 Device must be initialized.
1444 Parameters
1445 ----------
1446 options : :obj:`EventOptions`, optional
1447 Customizable dataclass for event creation options.
1449 Returns
1450 -------
1451 :obj:`~_event.Event`
1452 Newly created event object.
1454 """
1455 self._check_context_initialized() 2TJ7f8f9f!f#f$f%f'f(f)f*f+f2K^qUJVJWJ_qXJ3K4K`q5KvnYJZJ6K7K8K9K0J1J2J3JKN!K9m7Jsn#KUn8Jwt+p,p-p.p/p:p;pJgKg=h?htbub=p?p+o,o@p[p]pLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquq.o/o:ovqwqxqYgZg[h]hzbAbyqzq=o?oAqBqCq0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4q[o]o^o5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q
1456 cdef Context ctx = self._context 2TJ7f8f9f!f#f$f%f'f(f)f*f+f2K^qUJVJWJ_qXJ3K4K`q5KvnYJZJ6K7K8K9K0J1J2J3JKN!K9m7Jsn#KUn8Jwt+p,p-p.p/p:p;pJgKg=h?htbub=p?p+o,o@p[p]pLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquq.o/o:ovqwqxqYgZg[h]hzbAbyqzq=o?oAqBqCq0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4q[o]o^o5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q
1457 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2TJ7f8f9f!f#f$f%f'f(f)f*f+f2K^qUJVJWJ_qXJ3K4K`q5KvnYJZJ6K7K8K9K0J1J2J3JKN!K9m7Jsn#KUn8Jwt+p,p-p.p/p:p;pJgKg=h?htbub=p?p+o,o@p[p]pLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquq.o/o:ovqwqxqYgZg[h]hzbAbyqzq=o?oAqBqCq0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4q[o]o^o5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q
1459 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1460 """Allocate device memory from a specified stream.
1462 Allocates device memory of `size` bytes on the specified `stream`
1463 using the memory resource currently associated with this Device.
1465 Note
1466 ----
1467 Device must be initialized.
1469 Parameters
1470 ----------
1471 size : int
1472 Number of bytes to allocate.
1473 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1474 Keyword-only. The stream establishing the stream ordering semantic.
1475 Must be passed explicitly; pass ``self.default_stream`` to use
1476 the default stream.
1478 Returns
1479 -------
1480 :obj:`~_memory.Buffer`
1481 Newly created buffer object.
1483 """
1484 self._check_context_initialized() 2#m$m!H7ntn:h;h[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm
1485 return self.memory_resource.allocate(size, stream=stream) 2#m$m!H7ntn:h;h[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm
1487 def sync(self) -> None:
1488 """Synchronize this device's bound context.
1490 Waits for all preceding work in this device's bound :obj:`~_context.Context`
1491 to complete. Only that context is synchronized, not the device as a
1492 whole; work queued in a different context on the same device (e.g. a
1493 green context) is unaffected.
1495 Note
1496 ----
1497 Device must be initialized.
1499 """
1500 self._check_context_initialized() 2{F|FoOpOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaP#m$m9mwtunmILNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhO7m!m(m)m8m:MGmf kbm n
1501 cdef Context ctx = self._context 2{F|FoOpOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaP#m$m9mwtunmILNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhO7m!m(m)m8m:MGmf kbm n
1502 HANDLE_RETURN(context_synchronize(ctx._h_context)) 2{F|FoOpOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaP#m$m9mwtunmILNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhO7m!m(m)m8m:MGmf kbm n
1504 def create_graph_builder(self) -> GraphBuilder:
1505 """Create a new :obj:`~graph.GraphBuilder` on this device.
1507 Returns
1508 -------
1509 :obj:`~graph.GraphBuilder`
1510 Newly created graph builder object.
1512 """
1513 from cuda.core.graph._graph_builder import GraphBuilder 2DJEJFJGJHJIJJJKJLJynzn,m-m{I.mAnMJNJ/mBnCnOJ:mPJ;mQJDnEnFnRJSJ=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnMH;M=M?MeKfKgKonGnHnInJnKnLnMnpnINJN9mwt]J;r
1515 self._check_context_initialized() 2DJEJFJGJHJIJJJKJLJynzn,m-m{I.mAnMJNJ/mBnCnOJ:mPJ;mQJDnEnFnRJSJ=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnMH;M=M?MeKfKgKonGnHnInJnKnLnMnpnINJN9mwt]J;r
1516 return GraphBuilder._init(self.create_stream()) 2DJEJFJGJHJIJJJKJLJynzn,m-m{I.mAnMJNJ/mBnCnOJ:mPJ;mQJDnEnFnRJSJ=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnMH;M=M?MeKfKgKonGnHnInJnKnLnMnpnINJN9mwt]J;r
1518 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray:
1519 """Create an :obj:`~cuda.core.texture.OpaqueArray` on this device.
1521 Allocates an opaque, hardware-laid-out CUDA array for texture/surface
1522 access.
1524 Note
1525 ----
1526 Device must be initialized.
1528 Parameters
1529 ----------
1530 options : :obj:`~cuda.core.texture.OpaqueArrayOptions`
1531 Allocation options (shape, format, channels, surface flag).
1533 Returns
1534 -------
1535 :obj:`~cuda.core.texture.OpaqueArray`
1536 Newly created opaque array.
1538 .. versionadded:: 1.1.0
1539 """
1540 from cuda.core.texture._array import _create_opaque_array 2GIfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFIkJlJnJVIoJqJrJsJtJxnZH
1542 self._check_context_initialized() 2GIfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFIkJlJnJVIoJqJrJsJtJxnZH
1543 return _create_opaque_array(options, self._context, self._device_id) 2GIfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFIkJlJnJVIoJqJrJsJtJxnZH
1545 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray:
1546 """Create a :obj:`~cuda.core.texture.MipmappedArray` on this device.
1548 Allocates a mipmapped CUDA array for texture/surface access across
1549 levels.
1551 Note
1552 ----
1553 Device must be initialized.
1555 Parameters
1556 ----------
1557 options : :obj:`~cuda.core.texture.MipmappedArrayOptions`
1558 Allocation options (shape, format, channels, levels, surface flag).
1560 Returns
1561 -------
1562 :obj:`~cuda.core.texture.MipmappedArray`
1563 Newly created mipmapped array.
1565 .. versionadded:: 1.1.0
1566 """
1567 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2FI|J,K-K.K}J/KmJpJZH
1569 self._check_context_initialized() 2FI|J,K-K.K}J/KmJpJZH
1570 return _create_mipmapped_array(options, self._context, self._device_id) 2FI|J,K-K.K}J/KmJpJZH
1572 def create_texture_object(
1573 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None
1574 ) -> TextureObject:
1575 """Create a :obj:`~cuda.core.texture.TextureObject` on this device.
1577 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` /
1578 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d
1579 :obj:`~cuda.core.Buffer`, wrapped in a
1580 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for
1581 kernel-side sampled reads. The resource must belong to this device.
1583 Note
1584 ----
1585 Device must be initialized.
1587 Parameters
1588 ----------
1589 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1590 The memory backing the texture.
1591 options : :obj:`~cuda.core.texture.TextureObjectOptions`
1592 Sampling state (address/filter/read modes, normalization, etc.).
1594 Returns
1595 -------
1596 :obj:`~cuda.core.texture.TextureObject`
1597 Newly created texture object.
1599 .. versionadded:: 1.1.0
1600 """
1601 from cuda.core.texture._texture import _create_texture_object 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH
1603 self._check_context_initialized() 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH
1604 return _create_texture_object( 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH
1605 resource, options, self._context, self._device_id) 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH
1607 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject:
1608 """Create a :obj:`~cuda.core.texture.SurfaceObject` on this device.
1610 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a
1611 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for
1612 kernel-side typed load/store. The backing array must have been created
1613 with ``is_surface_load_store=True`` and must belong to this device.
1615 Note
1616 ----
1617 Device must be initialized.
1619 Parameters
1620 ----------
1621 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1622 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with
1623 ``is_surface_load_store=True``.
1625 Returns
1626 -------
1627 :obj:`~cuda.core.texture.SurfaceObject`
1628 Newly created surface object.
1630 .. versionadded:: 1.1.0
1631 """
1632 from cuda.core.texture._surface import _create_surface_object 2kJlJGtmJnJVIZH
1634 self._check_context_initialized() 2kJlJGtmJnJVIZH
1635 return _create_surface_object( 2kJlJGtmJnJVIZH
1636 resource, self._context, self._device_id) 2kJlJGtmJnJVIZH
1639cdef inline int Device_ensure_cuda_initialized() except? -1:
1640 """Initialize CUDA driver and check version compatibility (once per process)."""
1641 global _is_cuInit
1642 if _is_cuInit is False: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1643 with _lock, nogil:
1644 HANDLE_RETURN(cydriver.cuInit(0))
1645 _is_cuInit = True
1646 try:
1647 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1648 except ImportError:
1649 pass
1650 else:
1651 warn_if_cuda_major_version_mismatch()
1652 return 0 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1655cdef inline int Device_resolve_device_id(device_id) except? -1:
1656 """Resolve device_id, defaulting to current device or 0."""
1657 cdef cydriver.CUdevice dev
1658 cdef cydriver.CUcontext ctx
1659 cdef cydriver.CUresult err
1660 if device_id is None: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1661 with nogil: 2a #iZhDJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l GLHLILJLKLLLDgEh#m$m!KML}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n3 %o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.f7mAp#p$p%p$nZn'p(p%n'n0I0nhM_f/fepXoYoZo+nfpgp!mBp(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ)p1n*p:fXeSnGmf kb=FwnTnQF(n!J#J0c`e`fut{e{fstYe;f*oCpDpHp1c0L2cup3cvp4ciM5cjM6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp]q(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZH_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I
1662 err = cydriver.cuCtxGetDevice(&dev) 2a #iZhDJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l GLHLILJLKLLLDgEh#m$m!KML}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n3 %o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.f7mAp#p$p%p$nZn'p(p%n'n0I0nhM_f/fepXoYoZo+nfpgp!mBp(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ)p1n*p:fXeSnGmf kb=FwnTnQF(n!J#J0c`e`fut{e{fstYe;f*oCpDpHp1c0L2cup3cvp4ciM5cjM6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp]q(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZH_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I
1663 if err == cydriver.CUresult.CUDA_SUCCESS: 2a #iZhDJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l GLHLILJLKLLLDgEh#m$m!KML}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n3 %o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.f7mAp#p$p%p$nZn'p(p%n'n0I0nhM_f/fepXoYoZo+nfpgp!mBp(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ)p1n*p:fXeSnGmf kb=FwnTnQF(n!J#J0c`e`fut{e{fstYe;f*oCpDpHp1c0L2cup3cvp4ciM5cjM6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp]q(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZH_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I
1664 return int(dev) 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo p q r s t u v w x y z A B C D E F G H I J K L M N O P Q l GLHLILJLKLLL!KML7J#K8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n%o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*H+H8b9b,H-H!b.H/H:H;H=H?H@H[H]H^H_H`H#b{H$b|H%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnmIZIWnXnxpypzpNHYn)o_e7mApZn0I0nhM_fepXoYoZo+nfpgp!m(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ1nSnGmf kb=FwnTnQF!J#J0cutst*oHp1c0L2cup3cvp4ciM5cjM6cbg7cIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOeTpUpVpWpXpYpZp0p1p[J2p3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZHmi1I0i1i2ini3ioi4i5ipi6i2I7i8iqi9iri.Isi!i/Iti:I;I
1665 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1666 with nogil: 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti
1667 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti
1668 assert <void*>(ctx) == NULL 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti
1669 return 0 # cudart behavior 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti
1670 else:
1671 HANDLE_RETURN(err)
1672 elif device_id < 0: 2a LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t,m3t-m4t{I5t.m6t7t8t9t/m!t#t$t%t't:m(t)t*t+t;m,t-t.t/t:t;t=t?t@t[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuXuYuZu0uxt1uyt2u3u4u5u6u7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvSvBtTvUvesVvCtWvXvYvZv0v1v2vkt3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v`v^q{vUJ|v}v~v_qawXJbwcwdw`qewfw`ogw%mhw'miwjwkwlwmwnwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTx6HUx7HVxWxXxYxZx0x1x2x3xon4x5x6x7x8x9x!x#x$x%xpn'x(x)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h`n{n|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xXMkg9Flg=ImguJngogpg,xqg|f,frg}fsg~ftgYMugvgwgxgygzgAgBgCg-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b.x/x:x;x=x?x@x#m$mhK|IiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~IaJ5n6J{xbJFMlKcJdJ|x}x8J~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(soK+mqKOysKtKPyuKvKwKxKQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWz?j_eGM@jXz[j]j^j_j.sHM`jIMEsYzGKZz0z1z2z3z4z5z6z7z8z8m9z!z#z$z%z'z(z)z*z+zHK,z-z.z/z:z;zIK=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAPnfAHggAhAiAjAkAlAmAnAoAQnpAagqArAJKsAtAuAvAwARnxAjkkk/s:syAzAXeSnAABAGmCAf kbDAEAFAGA;slk=s!JHA#JKK?s@s[s0cIA]s^s_s`s{s|s}s~satbtctdtetJAHN1c0L2cKA3cLA4c5c6cbgMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5D*m6D7D8D9D!D#D$D%DPK'D(D)D*D+DQK,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjE^JkElEmEnEoEpEqE;rrEsEvttEuEvEwExEyEzEAEBECEDE|JEEFEGEHEIEJEKELEMEOHNEPHOEQHPERHQESHRETHSETEUHUEVHVEWHWEXHXEYHYEZE0EGt1E2E3E4EitSK5E6EHt7E8EIt9E!E#E$E%E'E(E)E*Exnjt+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itiWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1673 raise ValueError(f"device_id must be >= 0, got {device_id}")
1674 return device_id 2a LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t,m3t-m4t{I5t.m6t7t8t9t/m!t#t$t%t't:m(t)t*t+t;m,t-t.t/t:t;t=t?t@t[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuXuYuZu0uxt1uyt2u3u4u5u6u7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvSvBtTvUvesVvCtWvXvYvZv0v1v2vkt3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v`v^q{vUJ|v}v~v_qawXJbwcwdw`qewfw`ogw%mhw'miwjwkwlwmwnwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTx6HUx7HVxWxXxYxZx0x1x2x3xon4x5x6x7x8x9x!x#x$x%xpn'x(x)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h`n{n|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xXMkg9Flg=ImguJngogpg,xqg|f,frg}fsg~ftgYMugvgwgxgygzgAgBgCg-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b.x/x:x;x=x?x@x#m$mhK|IiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~IaJ5n6J{xbJFMlKcJdJ|x}x8J~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(soK+mqKOysKtKPyuKvKwKxKQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWz?j_eGM@jXz[j]j^j_j.sHM`jIMEsYzGKZz0z1z2z3z4z5z6z7z8z8m9z!z#z$z%z'z(z)z*z+zHK,z-z.z/z:z;zIK=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAPnfAHggAhAiAjAkAlAmAnAoAQnpAagqArAJKsAtAuAvAwARnxAjkkk/s:syAzAXeSnAABAGmCAf kbDAEAFAGA;slk=s!JHA#JKK?s@s[s0cIA]s^s_s`s{s|s}s~satbtctdtetJA1c0L2cKA3cLA4c5c6cbgMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5D*m6D7D8D9D!D#D$D%DPK'D(D)D*D+DQK,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjE^JkElEmEnEoEpEqE;rrEsEvttEuEvEwExEyEzEAEBECEDE|JEEFEGEHEIEJEKELEMEOHNEPHOEQHPERHQESHRETHSETEUHUEVHVEWHWEXHXEYHYEZE0EGt1E2E3E4EitSK5E6EHt7E8EIt9E!E#E$E%E'E(E)E*Exnjt+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itiWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1677cdef inline list Device_ensure_tls_devices(cls):
1678 """Ensure thread-local Device singletons exist, creating if needed."""
1679 cdef int total
1680 try: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1681 return _tls.devices 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF
1682 except AttributeError: 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1683 with nogil: 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1684 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1685 devices = _tls.devices = [] 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1686 for dev_id in range(total): 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1687 device = super(Device, cls).__new__(cls) 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1688 device._device_id = dev_id 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1689 device._memory_resource = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1690 device._has_inited = False 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1691 device._properties = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1692 device._resources = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1693 device._uuid = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1694 device._context = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1695 devices.append(device) 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF
1696 return devices 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF