Coverage for cuda/core/_device.pyx: 92.95%

482 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-03 02:41 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8  

9from cuda.bindings cimport cydriver 

10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN 

11from libcpp.vector cimport vector 

12  

13import threading 

14  

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 get_primary_context, 

27 get_last_error, 

28 as_cu, 

29) 

30  

31from cuda.core._stream import IsStreamType, Stream, StreamOptions 

32from cuda.core._utils.clear_error_support import assert_type 

33from cuda.core._utils.cuda_utils import ( 

34 ComputeCapability, 

35 CUDAError, 

36 driver, 

37 handle_return, 

38 runtime, 

39) 

40from cuda.core._stream cimport default_stream 

41  

42from typing import TYPE_CHECKING 

43  

44if TYPE_CHECKING: 

45 import cuda.core.system # no-cython-lint 

46 from cuda.core.graph import GraphBuilder 

47 from cuda.core.texture import ( 

48 MipmappedArray, 

49 MipmappedArrayOptions, 

50 OpaqueArray, 

51 OpaqueArrayOptions, 

52 ResourceDescriptor, 

53 SurfaceObject, 

54 TextureObject, 

55 TextureObjectOptions, 

56 ) 

57  

58# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python, 

59# but it seems it is very convenient to expose them for testing purposes... 

60_tls = threading.local() 

61_lock = threading.Lock() 

62cdef bint _is_cuInit = False 

63  

64__all__ = ['Device'] 

65  

66  

67cdef class DeviceProperties: 

68 """ 

69 A class to query various attributes of a CUDA device. 

70  

71 Attributes are read-only and provide information about the device. 

72 """ 

73 cdef: 

74 int _handle 

75 dict _cache 

76  

77 def __init__(self, *args, **kwargs) -> None: 

78 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2a ~O

79  

80 @classmethod 

81 def _init(cls, handle: int) -> DeviceProperties: 

82 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

83 self._handle = handle 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

84 self._cache = {} 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

85 return self 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

86  

87 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2: 

88 """Retrieve the attribute value directly from the driver.""" 

89 cdef int val 

90 cdef cydriver.CUresult err 

91 with nogil: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

92 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

93 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

94 return <int>default 

95 HANDLE_RETURN(err) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

96 return val 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

97  

98 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2: 

99 """Retrieve the attribute value, using cache if applicable.""" 

100 cached = self._cache.get(attr) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

101 if cached is not None: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

102 return cached 2!f#f$f%f'f(f~mRfUpVpWp(stFPm0nInMmbncndnMcenKmTb@mNcLegn'sOc0G1G2GThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h3G

103 cdef int value = self._get_attribute(attr, default) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

104 self._cache[attr] = value # setdefault not needed for ints 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

105 return value 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

106  

107 @property 

108 def max_threads_per_block(self) -> int: 

109 """int: Maximum number of threads per block.""" 

110 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2lGZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E0GrHsHtHuHvHwH1GxHyHzHAHBHCH2GDHEHFHGHHHIH

111  

112 @property 

113 def max_block_dim_x(self) -> int: 

114 """int: Maximum block dimension X.""" 

115 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2a tm

116  

117 @property 

118 def max_block_dim_y(self) -> int: 

119 """int: Maximum block dimension Y.""" 

120 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2hG

121  

122 @property 

123 def max_block_dim_z(self) -> int: 

124 """int: Maximum block dimension Z.""" 

125 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2um

126  

127 @property 

128 def max_grid_dim_x(self) -> int: 

129 """int: Maximum grid dimension X.""" 

130 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2wmPm

131  

132 @property 

133 def max_grid_dim_y(self) -> int: 

134 """int: Maximum grid dimension Y.""" 

135 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2xm

136  

137 @property 

138 def max_grid_dim_z(self) -> int: 

139 """int: Maximum grid dimension Z.""" 

140 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2iG

141  

142 @property 

143 def max_shared_memory_per_block(self) -> int: 

144 """int: Maximum shared memory available per block in bytes.""" 

145 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2kGZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E0GrHsHtHuHvHwH1GxHyHzHAHBHCH2GDHEHFHGHHHIH

146  

147 @property 

148 def total_constant_memory(self) -> int: 

149 """int: Memory available on device for constant variables in a CUDA C kernel in bytes.""" 

150 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2VG

151  

152 @property 

153 def warp_size(self) -> int: 

154 """int: Warp size in threads.""" 

155 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2ZG

156  

157 @property 

158 def max_pitch(self) -> int: 

159 """int: Maximum pitch in bytes allowed by memory copies.""" 

160 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2zm

161  

162 @property 

163 def maximum_texture1d_width(self) -> int: 

164 """int: Maximum 1D texture width.""" 

165 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2vG

166  

167 @property 

168 def maximum_texture1d_linear_width(self) -> int: 

169 """int: Maximum width for a 1D texture bound to linear memory.""" 

170 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2uG

171  

172 @property 

173 def maximum_texture1d_mipmapped_width(self) -> int: 

174 """int: Maximum mipmapped 1D texture width.""" 

175 return self._get_cached_attribute( 2LF

176 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2LF

177 ) 

178  

179 @property 

180 def maximum_texture2d_width(self) -> int: 

181 """int: Maximum 2D texture width.""" 

182 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2CG

183  

184 @property 

185 def maximum_texture2d_height(self) -> int: 

186 """int: Maximum 2D texture height.""" 

187 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2yG

188  

189 @property 

190 def maximum_texture2d_linear_width(self) -> int: 

191 """int: Maximum width for a 2D texture bound to linear memory.""" 

192 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2BG

193  

194 @property 

195 def maximum_texture2d_linear_height(self) -> int: 

196 """int: Maximum height for a 2D texture bound to linear memory.""" 

197 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2zG

198  

199 @property 

200 def maximum_texture2d_linear_pitch(self) -> int: 

201 """int: Maximum pitch in bytes for a 2D texture bound to linear memory.""" 

202 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2AG

203  

204 @property 

205 def maximum_texture2d_mipmapped_width(self) -> int: 

206 """int: Maximum mipmapped 2D texture width.""" 

207 return self._get_cached_attribute( 2PF

208 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2PF

209 ) 

210  

211 @property 

212 def maximum_texture2d_mipmapped_height(self) -> int: 

213 """int: Maximum mipmapped 2D texture height.""" 

214 return self._get_cached_attribute( 2OF

215 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2OF

216 ) 

217  

218 @property 

219 def maximum_texture3d_width(self) -> int: 

220 """int: Maximum 3D texture width.""" 

221 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2Em

222  

223 @property 

224 def maximum_texture3d_height(self) -> int: 

225 """int: Maximum 3D texture height.""" 

226 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2EG

227  

228 @property 

229 def maximum_texture3d_depth(self) -> int: 

230 """int: Maximum 3D texture depth.""" 

231 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2DG

232  

233 @property 

234 def maximum_texture3d_width_alternate(self) -> int: 

235 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported.""" 

236 return self._get_cached_attribute( 2SF

237 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2SF

238 ) 

239  

240 @property 

241 def maximum_texture3d_height_alternate(self) -> int: 

242 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported.""" 

243 return self._get_cached_attribute( 2RF

244 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2RF

245 ) 

246  

247 @property 

248 def maximum_texture3d_depth_alternate(self) -> int: 

249 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported.""" 

250 return self._get_cached_attribute( 2QF

251 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2QF

252 ) 

253  

254 @property 

255 def maximum_texturecubemap_width(self) -> int: 

256 """int: Maximum cubemap texture width or height.""" 

257 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2Fm

258  

259 @property 

260 def maximum_texture1d_layered_width(self) -> int: 

261 """int: Maximum 1D layered texture width.""" 

262 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2tG

263  

264 @property 

265 def maximum_texture1d_layered_layers(self) -> int: 

266 """int: Maximum layers in a 1D layered texture.""" 

267 return self._get_cached_attribute( 2KF

268 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2KF

269 ) 

270  

271 @property 

272 def maximum_texture2d_layered_width(self) -> int: 

273 """int: Maximum 2D layered texture width.""" 

274 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2Dm

275  

276 @property 

277 def maximum_texture2d_layered_height(self) -> int: 

278 """int: Maximum 2D layered texture height.""" 

279 return self._get_cached_attribute( 2MF

280 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2MF

281 ) 

282  

283 @property 

284 def maximum_texture2d_layered_layers(self) -> int: 

285 """int: Maximum layers in a 2D layered texture.""" 

286 return self._get_cached_attribute( 2NF

287 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2NF

288 ) 

289  

290 @property 

291 def maximum_texturecubemap_layered_width(self) -> int: 

292 """int: Maximum cubemap layered texture width or height.""" 

293 return self._get_cached_attribute( 2#l

294 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2#l

295 ) 

296  

297 @property 

298 def maximum_texturecubemap_layered_layers(self) -> int: 

299 """int: Maximum layers in a cubemap layered texture.""" 

300 return self._get_cached_attribute( 2TF

301 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2TF

302 ) 

303  

304 @property 

305 def maximum_surface1d_width(self) -> int: 

306 """int: Maximum 1D surface width.""" 

307 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2oG

308  

309 @property 

310 def maximum_surface2d_width(self) -> int: 

311 """int: Maximum 2D surface width.""" 

312 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2Cm

313  

314 @property 

315 def maximum_surface2d_height(self) -> int: 

316 """int: Maximum 2D surface height.""" 

317 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2Am

318  

319 @property 

320 def maximum_surface3d_width(self) -> int: 

321 """int: Maximum 3D surface width.""" 

322 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2rG

323  

324 @property 

325 def maximum_surface3d_height(self) -> int: 

326 """int: Maximum 3D surface height.""" 

327 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2qG

328  

329 @property 

330 def maximum_surface3d_depth(self) -> int: 

331 """int: Maximum 3D surface depth.""" 

332 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2pG

333  

334 @property 

335 def maximum_surface1d_layered_width(self) -> int: 

336 """int: Maximum 1D layered surface width.""" 

337 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2nG

338  

339 @property 

340 def maximum_surface1d_layered_layers(self) -> int: 

341 """int: Maximum layers in a 1D layered surface.""" 

342 return self._get_cached_attribute( 2FF

343 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2FF

344 ) 

345  

346 @property 

347 def maximum_surface2d_layered_width(self) -> int: 

348 """int: Maximum 2D layered surface width.""" 

349 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2Bm

350  

351 @property 

352 def maximum_surface2d_layered_height(self) -> int: 

353 """int: Maximum 2D layered surface height.""" 

354 return self._get_cached_attribute( 2GF

355 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2GF

356 ) 

357  

358 @property 

359 def maximum_surface2d_layered_layers(self) -> int: 

360 """int: Maximum layers in a 2D layered surface.""" 

361 return self._get_cached_attribute( 2HF

362 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2HF

363 ) 

364  

365 @property 

366 def maximum_surfacecubemap_width(self) -> int: 

367 """int: Maximum cubemap surface width.""" 

368 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2sG

369  

370 @property 

371 def maximum_surfacecubemap_layered_width(self) -> int: 

372 """int: Maximum cubemap layered surface width.""" 

373 return self._get_cached_attribute( 2JF

374 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2JF

375 ) 

376  

377 @property 

378 def maximum_surfacecubemap_layered_layers(self) -> int: 

379 """int: Maximum layers in a cubemap layered surface.""" 

380 return self._get_cached_attribute( 2IF

381 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2IF

382 ) 

383  

384 @property 

385 def max_registers_per_block(self) -> int: 

386 """int: Maximum number of 32-bit registers available to a thread block.""" 

387 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2jG

388  

389 @property 

390 def clock_rate(self) -> int: 

391 """int: Typical clock frequency in kilohertz.""" 

392 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 29f[manjbGnR

393  

394 @property 

395 def texture_alignment(self) -> int: 

396 """int: Alignment requirement for textures.""" 

397 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2TG

398  

399 @property 

400 def texture_pitch_alignment(self) -> int: 

401 """int: Pitch alignment requirement for textures.""" 

402 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2UG

403  

404 @property 

405 def gpu_overlap(self) -> bool: 

406 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead.""" 

407 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2}F

408  

409 @property 

410 def multiprocessor_count(self) -> int: 

411 """int: Number of multiprocessors on device.""" 

412 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2JmPm

413  

414 @property 

415 def kernel_exec_timeout(self) -> bool: 

416 """bool: Specifies whether there is a run time limit on kernels.""" 

417 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 29H

418  

419 @property 

420 def integrated(self) -> bool: 

421 """bool: Device is integrated with host memory.""" 

422 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2dG

423  

424 @property 

425 def can_map_host_memory(self) -> bool: 

426 """bool: Device can map host memory into CUDA address space.""" 

427 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2=F

428  

429 @property 

430 def compute_mode(self) -> int: 

431 """int: Compute mode (See CUcomputemode for details).""" 

432 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 28H

433  

434 @property 

435 def concurrent_kernels(self) -> bool: 

436 """bool: Device can possibly execute multiple kernels concurrently.""" 

437 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2?F

438  

439 @property 

440 def ecc_enabled(self) -> bool: 

441 """bool: Device has ECC support enabled.""" 

442 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2^F

443  

444 @property 

445 def pci_bus_id(self) -> int: 

446 """int: PCI bus ID of the device.""" 

447 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2OG

448  

449 @property 

450 def pci_device_id(self) -> int: 

451 """int: PCI device ID of the device.""" 

452 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2PG

453  

454 @property 

455 def pci_domain_id(self) -> int: 

456 """int: PCI domain ID of the device.""" 

457 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2QG

458  

459 @property 

460 def tcc_driver(self) -> bool: 

461 """bool: Device is using TCC driver model.""" 

462 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2SG

463  

464 @property 

465 def memory_clock_rate(self) -> int: 

466 """int: Peak memory clock frequency in kilohertz.""" 

467 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2!H

468  

469 @property 

470 def global_memory_bus_width(self) -> int: 

471 """int: Global memory bus width in bits.""" 

472 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2`F

473  

474 @property 

475 def l2_cache_size(self) -> int: 

476 """int: Size of L2 cache in bytes.""" 

477 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2rm

478  

479 @property 

480 def max_threads_per_multiprocessor(self) -> int: 

481 """int: Maximum resident threads per multiprocessor.""" 

482 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2mGZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E

483  

484 @property 

485 def unified_addressing(self) -> bool: 

486 """bool: Device shares a unified address space with the host.""" 

487 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a WG

488  

489 @property 

490 def compute_capability_major(self) -> int: 

491 """int: Major compute capability version number.""" 

492 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)stFjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf

493  

494 @property 

495 def compute_capability_minor(self) -> int: 

496 """int: Minor compute capability version number.""" 

497 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)spmjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf

498  

499 @property 

500 def global_l1_cache_supported(self) -> bool: 

501 """bool: Device supports caching globals in L1.""" 

502 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2_F

503  

504 @property 

505 def local_l1_cache_supported(self) -> bool: 

506 """bool: Device supports caching locals in L1.""" 

507 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2sm

508  

509 @property 

510 def max_shared_memory_per_multiprocessor(self) -> int: 

511 """int: Maximum shared memory available per multiprocessor in bytes.""" 

512 return self._get_cached_attribute( 2EFZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E

513 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2EFZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E

514 ) 

515  

516 @property 

517 def max_registers_per_multiprocessor(self) -> int: 

518 """int: Maximum number of 32-bit registers available per multiprocessor.""" 

519 return self._get_cached_attribute( 2DF1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E

520 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2DF1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E

521 ) 

522  

523 @property 

524 def managed_memory(self) -> bool: 

525 """bool: Device can allocate managed memory on this system.""" 

526 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgfG

527  

528 @property 

529 def multi_gpu_board(self) -> bool: 

530 """bool: Device is on a multi-GPU board.""" 

531 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2IG

532  

533 @property 

534 def multi_gpu_board_group_id(self) -> int: 

535 """int: Unique id for a group of devices on the same multi-GPU board.""" 

536 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2JG

537  

538 @property 

539 def host_native_atomic_supported(self) -> bool: 

540 """bool: Link between the device and the host supports all native atomic operations.""" 

541 return bool( 2AF

542 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2AF

543 ) 

544  

545 @property 

546 def single_to_double_precision_perf_ratio(self) -> int: 

547 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance.""" 

548 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2#H

549  

550 @property 

551 def pageable_memory_access(self) -> bool: 

552 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it.""" 

553 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2NG

554  

555 @property 

556 def concurrent_managed_access(self) -> bool: 

557 """bool: Device can coherently access managed memory concurrently with the CPU.""" 

558 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2~E!f#f$f%f'f(fZn-E.E/E:E;E=E[f]f^f_f`f{f|f}f~f+fRfag,fbg-fcgdgegfggghgigjgkglg@FR ngogpg.f6f0n1nPo2nInQoRo.n?mSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{E4o#n

559  

560 @property 

561 def compute_preemption_supported(self) -> bool: 

562 """bool: Device supports compute preemption.""" 

563 return bool( 2uF

564 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2uF

565 ) 

566  

567 @property 

568 def can_use_host_pointer_for_registered_mem(self) -> bool: 

569 """bool: Device can access host registered memory at the same virtual address as the CPU.""" 

570 return bool( 27l

571 self._get_cached_attribute( 27l

572 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 27l

573 ) 

574 ) 

575  

576 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

577  

578 @property 

579 def cooperative_launch(self) -> bool: 

580 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel.""" 

581 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2qmPm

582  

583 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

584  

585 @property 

586 def max_shared_memory_per_block_optin(self) -> int: 

587 """int: Maximum optin shared memory per block.""" 

588 return self._get_cached_attribute( 2!l

589 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2!l

590 ) 

591  

592 @property 

593 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

594 """bool: Device accesses pageable memory via the host's page tables.""" 

595 return bool( 2mF

596 self._get_cached_attribute( 2mF

597 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2mF

598 ) 

599 ) 

600  

601 @property 

602 def direct_managed_mem_access_from_host(self) -> bool: 

603 """bool: The host can directly access managed memory on the device without migration.""" 

604 return bool( 2gF

605 self._get_cached_attribute( 2gF

606 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2gF

607 ) 

608 ) 

609  

610 @property 

611 def virtual_memory_management_supported(self) -> bool: 

612 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs.""" 

613 return bool( 2oFNcLe)f*fgn$n'sOc8f

614 self._get_cached_attribute( 2oFNcLe)f*fgn$n'sOc8f

615 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2oFNcLe)f*fgn$n'sOc8f

616 ) 

617 ) 

618  

619 @property 

620 def handle_type_posix_file_descriptor_supported(self) -> bool: 

621 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

622 return bool( 2U l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbiFUbVbWbXbP Q S T

623 self._get_cached_attribute( 2U l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbiFUbVbWbXbP Q S T

624 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2U l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbiFUbVbWbXbP Q S T

625 ) 

626 ) 

627  

628 @property 

629 def handle_type_win32_handle_supported(self) -> bool: 

630 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

631 return bool( 2yF

632 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2yF

633 ) 

634  

635 @property 

636 def handle_type_win32_kmt_handle_supported(self) -> bool: 

637 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

638 return bool( 2jF

639 self._get_cached_attribute( 2jF

640 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2jF

641 ) 

642 ) 

643  

644 @property 

645 def max_blocks_per_multiprocessor(self) -> int: 

646 """int: Maximum number of blocks per multiprocessor.""" 

647 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2vm

648  

649 @property 

650 def generic_compression_supported(self) -> bool: 

651 """bool: Device supports compression of memory.""" 

652 return bool( 2vF

653 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2vF

654 ) 

655  

656 @property 

657 def max_persisting_l2_cache_size(self) -> int: 

658 """int: Maximum L2 persisting lines capacity setting in bytes.""" 

659 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2ym

660  

661 @property 

662 def max_access_policy_window_size(self) -> int: 

663 """int: Maximum value of CUaccessPolicyWindow.num_bytes.""" 

664 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2gG

665  

666 @property 

667 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

668 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate.""" 

669 return bool( 2hF

670 self._get_cached_attribute( 2hF

671 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2hF

672 ) 

673 ) 

674  

675 @property 

676 def reserved_shared_memory_per_block(self) -> int: 

677 """int: Shared memory reserved by CUDA driver per block in bytes.""" 

678 return self._get_cached_attribute( 2VF

679 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2VF

680 ) 

681  

682 @property 

683 def sparse_cuda_array_supported(self) -> bool: 

684 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.""" 

685 return bool( 2WF

686 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2WF

687 ) 

688  

689 @property 

690 def read_only_host_register_supported(self) -> bool: 

691 """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.""" 

692 return bool( 2UF

693 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2UF

694 ) 

695  

696 @property 

697 def memory_pools_supported(self) -> bool: 

698 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs.""" 

699 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2~E@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsWsXsYsZs0s1s2s3s(F)F*F+F,F-F/f!fWiUfVfXiDeYiZi0i1i2i:f#f3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f/iYfZf:iFe;i=i?i@i[i=f%f]i0f1f^iGe_i`i{i|i}i?f'f~i2f3fajHebjcjdjejfj@f(fgj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.F/F4s5s6s}q~q}oNmOm7s8s9s~oapbp!scpdpepfp#s$sgp%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jFnZnU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbHmngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?m3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{E:j4oLn#nkr;j7fMc=jUbVbWb?jXb@j[j]j^j_j`j{j|j}j~jMe-g.gThakbkckNeUhVhdkek; = ? @ [ fkgkhkikjkohphqhrhshkklkmknkokWhOe/g:gXhpkqkrkPeYhZhsktk;g=g?g@g[gQe]g^gukvkwk0h1hxkykzkAkBkCkDk$b%b'b(b)bSeTeUeEkFkGkHkIkVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b+b,b-b.bTkUkVkWkXkthuhvhwhxh3h4h5h6h7hZe}g~g8hYkZk0k0e9h!h1k2k} ~ abbbcb3k4k5k6k7kyhzhAhBhCh8k9k!k#k$k#h1eahbh$h%k'k(k2e%h'h)k*kchdhehfhgh3ehhih+k,k-k(h)h.k/k:k;k=k?k@k?b@b[b]b^b5e6e7e[k]k^k_k`k8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`b{b|b}bglhliljlklDhEhFhGhHhP Q S T llmlnlolpl+h,h-h.h/hqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTl3G

700  

701 @property 

702 def gpu_direct_rdma_supported(self) -> bool: 

703 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information).""" 

704 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2{FOc8f

705  

706 @property 

707 def gpu_direct_rdma_flush_writes_options(self) -> int: 

708 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum.""" 

709 return self._get_cached_attribute( 2wF

710 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2wF

711 ) 

712  

713 @property 

714 def gpu_direct_rdma_writes_ordering(self) -> int: 

715 """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.""" 

716 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2|F

717  

718 @property 

719 def mempool_supported_handle_types(self) -> int: 

720 """int: Handle types supported with mempool based IPC.""" 

721 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2Im

722  

723 @property 

724 def deferred_mapping_cuda_array_supported(self) -> bool: 

725 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.""" 

726 return bool( 2fF

727 self._get_cached_attribute( 2fF

728 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2fF

729 ) 

730 ) 

731  

732 @property 

733 def numa_config(self) -> int: 

734 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum.""" 

735 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2LG

736  

737 @property 

738 def numa_id(self) -> int: 

739 """int: NUMA node ID of the GPU memory.""" 

740 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2MG

741  

742 @property 

743 def multicast_supported(self) -> bool: 

744 """bool: Device supports switch multicast and reduction operations.""" 

745 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2KG

746  

747 @property 

748 def surface_alignment(self) -> int: 

749 """int: Surface alignment requirement in bytes.""" 

750 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2RG

751  

752 @property 

753 def async_engine_count(self) -> int: 

754 """int: Number of asynchronous engines.""" 

755 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2:F

756  

757 @property 

758 def can_tex2d_gather(self) -> bool: 

759 """bool: True if device supports 2D texture gather operations, False if not.""" 

760 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2nm

761  

762 @property 

763 def maximum_texture2d_gather_width(self) -> int: 

764 """int: Maximum 2D texture gather width.""" 

765 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2xG

766  

767 @property 

768 def maximum_texture2d_gather_height(self) -> int: 

769 """int: Maximum 2D texture gather height.""" 

770 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2wG

771  

772 @property 

773 def stream_priorities_supported(self) -> bool: 

774 """bool: True if device supports stream priorities, False if not.""" 

775 return bool( 2XF

776 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2XF

777 ) 

778  

779 @property 

780 def can_flush_remote_writes(self) -> bool: 

781 """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.""" 

782 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2;F

783  

784 @property 

785 def host_register_supported(self) -> bool: 

786 """bool: Device supports host memory registration via cudaHostRegister.""" 

787 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2cG

788  

789 @property 

790 def timeline_semaphore_interop_supported(self) -> bool: 

791 """bool: External timeline semaphore interop is supported on the device.""" 

792 return bool( 2nF

793 self._get_cached_attribute( 2nF

794 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2nF

795 ) 

796 ) 

797  

798 @property 

799 def cluster_launch(self) -> bool: 

800 """bool: Indicates device supports cluster launch.""" 

801 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2om

802  

803 @property 

804 def can_use_64_bit_stream_mem_ops(self) -> bool: 

805 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs.""" 

806 return bool( 2rF

807 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2rF

808 ) 

809  

810 @property 

811 def can_use_stream_wait_value_nor(self) -> bool: 

812 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs.""" 

813 return bool( 2sF

814 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2sF

815 ) 

816  

817 @property 

818 def dma_buf_supported(self) -> bool: 

819 """bool: Device supports buffer sharing with dma_buf mechanism.""" 

820 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2]F

821  

822 # Start of CUDA 12 device attributes 

823  

824 @property 

825 def ipc_event_supported(self) -> bool: 

826 """bool: Device supports IPC Events.""" 

827 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2eG

828  

829 @property 

830 def mem_sync_domain_count(self) -> int: 

831 """int: Number of memory domains the device supports.""" 

832 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2GG

833  

834 @property 

835 def tensor_map_access_supported(self) -> bool: 

836 """bool: Device supports accessing memory using Tensor Map.""" 

837 return bool( 2YFIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g

838 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2YFIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g

839 ) 

840  

841 @property 

842 def handle_type_fabric_supported(self) -> bool: 

843 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate().""" 

844 return bool( 2xF

845 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2xF

846 ) 

847  

848 @property 

849 def unified_function_pointers(self) -> bool: 

850 """bool: Device supports unified function pointers.""" 

851 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2XG

852  

853 @property 

854 def mps_enabled(self) -> bool: 

855 """bool: Indicates if contexts created on this device will be shared via MPS.""" 

856 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2HG

857  

858 @property 

859 def host_numa_id(self) -> int: 

860 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA.""" 

861 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2-E.E:E;El m n o 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 bGIn*jqg+j,j-j.jrg/jf @mfn

862  

863 @property 

864 def d3d12_cig_supported(self) -> bool: 

865 """bool: Device supports CIG with D3D12.""" 

866 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2[F

867  

868 @property 

869 def mem_decompress_algorithm_mask(self) -> int: 

870 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum.""" 

871 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2FG

872  

873 @property 

874 def mem_decompress_maximum_length(self) -> int: 

875 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed.""" 

876 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2Gm

877  

878 @property 

879 def vulkan_cig_supported(self) -> bool: 

880 """bool: Device supports CIG with Vulkan.""" 

881 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2YG

882  

883 @property 

884 def gpu_pci_device_id(self) -> int: 

885 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID. 

886  

887 Returns 0 if the driver does not support this query. 

888 """ 

889 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2~F

890  

891 @property 

892 def gpu_pci_subsystem_id(self) -> int: 

893 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID. 

894  

895 Returns 0 if the driver does not support this query. 

896 """ 

897 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2aG

898  

899 @property 

900 def host_numa_virtual_memory_management_supported(self) -> bool: 

901 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

902 return bool( 2kF

903 self._get_cached_attribute( 2kF

904 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2kF

905 ) 

906 ) 

907  

908 @property 

909 def host_numa_memory_pools_supported(self) -> bool: 

910 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

911 return bool( 2lrmr[mxnJHKHLHMH;sNHUpVpWpnryn=s(s?sBFqgrgf

912 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2lrmr[mxnJHKHLHMH;sNHUpVpWpnryn=s(s?sBFqgrgf

913 ) 

914  

915 # Start of CUDA 13 device attributes 

916  

917 @property 

918 def host_numa_multinode_ipc_supported(self) -> bool: 

919 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system.""" 

920 return bool( 2CF

921 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2CF

922 ) 

923  

924 @property 

925 def host_memory_pools_supported(self) -> bool: 

926 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

927 IF CUDA_CORE_BUILD_MAJOR < 13: 

928 return False 

929 ELSE: 

930 return bool( 2~E~ml m n o 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 zFMmYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j5odnMcenXJKmf Tb|E@mfn}E

931 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2~E~ml m n o 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 zFMmYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j5odnMcenXJKmf Tb|E@mfn}E

932 ) 

933  

934 @property 

935 def host_virtual_memory_management_supported(self) -> bool: 

936 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

937 IF CUDA_CORE_BUILD_MAJOR < 13: 

938 return False 

939 ELSE: 

940 return bool( 2lF

941 self._get_cached_attribute( 2lF

942 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2lF

943 ) 

944 ) 

945  

946 @property 

947 def host_alloc_dma_buf_supported(self) -> bool: 

948 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism.""" 

949 IF CUDA_CORE_BUILD_MAJOR < 13: 

950 return False 

951 ELSE: 

952 return bool( 29l

953 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 29l

954 ) 

955  

956 @property 

957 def only_partial_host_native_atomic_supported(self) -> bool: 

958 """bool: Link between the device and the host supports only some native atomic operations.""" 

959 IF CUDA_CORE_BUILD_MAJOR < 13: 

960 return False 

961 ELSE: 

962 return bool( 28l

963 self._get_cached_attribute( 28l

964 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 28l

965 ) 

966 ) 

967  

968  

969class Device: 

970 """Represent a GPU and act as an entry point for cuda.core features. 

971  

972 This is a singleton object that helps ensure interoperability 

973 across multiple libraries imported in the process to both see 

974 and use the same GPU device. 

975  

976 While acting as the entry point, many other CUDA resources can be 

977 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent 

978 resource created through this device, will continue to refer to 

979 this device's context. 

980  

981 Newly returned :obj:`~_device.Device` objects are thread-local singletons 

982 for a specified device. 

983  

984 Note 

985 ---- 

986 Will not initialize the GPU. 

987  

988 Parameters 

989 ---------- 

990 device_id : int, optional 

991 Device ordinal to return a :obj:`~_device.Device` object for. 

992 Default value of `None` return the currently used device. 

993  

994 """ 

995 __slots__ = ( 

996 "_device_id", 

997 "_memory_resource", 

998 "_has_inited", 

999 "_properties", 

1000 "_resources", 

1001 "_uuid", 

1002 "_context", 

1003 "__weakref__", 

1004 ) 

1005  

1006 def __new__(cls, device_id: Device | int | None = None) -> Device: 

1007 if isinstance(device_id, Device): 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vAMFjBMGjCMHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r zN3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSngN4jSfTfAL5jLm(yAN6jhN7jBN8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzuMkrOp)oDM;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3rEM=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUb!LVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1008 return device_id 25s6s}oNmOm7s8s9s~oapbp!scpdpepfp#s$sgpAMBMCM%n'n(n)n*n+n,n-nFnU %HV 'HW X GpY (HZ 0 zN1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - )H*H. / : 5F6F)K*K+K,KgNTfALLmANhNBNBLCL=m3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)j:jLnuMDM7fEMLegn'sOc+o,o-o5JtIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIiI!LjIkIP Q

1009  

1010 Device_ensure_cuda_initialized() 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1011 device_id = Device_resolve_device_id(device_id) 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1012 devices = Device_ensure_tls_devices(cls) 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1013  

1014 try: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1015 return devices[device_id] 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1016 except IndexError: 2xLyL

1017 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2xLyL

1018  

1019 def _check_context_initialized(self) -> None: 

1020 if not self._has_inited: 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%IonpnqnpoXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3sUfVfWfXfYfZf0f1f2f3f4f5f4sVH4GWHXH`J{JYJ}q(I)I*I~q+I}oNmOm|mwoxo~oapbpcpdpepfpgpYH|JyozoAoBoCoDo%sAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJWLlm}J,I-I~JaKEoFoGobKcKdKeKfKZJ0J1J2JXLgK.I/IhKiKHoIoJojKkKlKmKnKCNoK:I;IpKqKKoLoMorKsKtKuKvKYLmmOHPHNoZL0LZH0H:mrnOo1Hsntnunvn}mwn;m:K:h;h;K=hQH/nRH:n?h@h;nFM[hGM]h^h=K_h5G`h?K{h=n?n@n6G@K|h[K}h]K~h^Kaibicidieifigihiii[n]n^n_n`n{n|n}n~naoDNbocoENdoFNeofoGNgoHNhoiojokolNmNnNoNpNqNrNwKxKsNtNuNvNwNxNyN$HINJNKNLNMNNNONPNQNRNSNTNUNVN9fWN[mXN1L2L3L4L5L6L7L8LHMYNZN0N1N2N3N4N5N6N7N8N9N!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~NaObOcOdOeOfOgOyKzKAKBKCKDK]m^m3JEK|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnhOiOjOkOlOmOnOoOpOqOrOsOtOSHloinR Pm_Hzn`mNnjnOnPnQnAnBnjikiuOvOIMwOJMxOyOKMLMzOAOBOMMCONMOMPMQMRMSMTMUMVMDOWMXMYMZMEO0M1MFOGOHOIO2MJO3MKOLO4M5MMONOOO6MPO7M8M9M!M#M$M%M'M(MQO)M*M+M,MRO-M.MSOTOUOVO/MWO:MXOYO;M=MZO0O1O?M2O@M[M]M^M_M`M{M|M}M3O~MaNbNcN4OdNeN5O6ORnCnSnLmTnUnVnWnXnYn.n=m?mMmuMDMDn7OKmf TbEMEntJuJ,g%l'l#L(l9p*r)l+r!p#p$p,r*l-r+l.r%p'p(p/r-g.g; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb)p*poh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_r[l`r+p,p-p{r/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlqth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfs]l@omqnqoqhs}g~g} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bpqqqyh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqscmrsrqsqtqssahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVqDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsP Q S T dmCsWqXqYqDsem|oZq0q1qFsfmGs2q3q4qHsgmIs5q6q7qJshmKs8q9q!qLsimMs#q$q%qNsjmOs'q(q)qPskmQs*q+q,qRsSKAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#K$KWJ%K'KKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HFJ%J'J(JGJ)JPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHwM

1021 raise CUDAError( 

1022 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?" 

1023 ) 

1024  

1025  

1026 @classmethod 

1027 def get_all_devices(cls) -> tuple[Device, ...]: 

1028 """ 

1029 Query the available device instances. 

1030  

1031 Returns 

1032 ------- 

1033 tuple of Device 

1034 A tuple containing instances of available devices. 

1035 """ 

1036 return cls._get_all_devices_from_cuda_driver() 2orRfqrrrsrdFULVL8FeFeLZIjikiWrXrYrZr0r1r2r0I1I3r4r5r6r7r8r9r!r#r$r%r'r(r)rtIuIvIwIxIyIzIAIBICIDIEIFIGIHIII@ogs|oEs3G2I3I4I5IxMyMzM

1037  

1038 @classmethod 

1039 def _get_all_devices_from_cuda_driver(cls): 

1040 Device_ensure_cuda_initialized() 2orRfqrrrsrdFULVL8FeFeLZIjikiWrXrYrZr0r1r2r0I1I3r4r5r6r7r8r9r!r#r$r%r'r(r)rtIuIvIwIxIyIzIAIBICIDIEIFIGIHIII@ogs|oEs3G2I3I4I5IxMyMzM

1041 return tuple(Device_ensure_tls_devices(cls)) 2orRfqrrrsrdFULVL8FeFeLZIjikiWrXrYrZr0r1r2r0I1I3r4r5r6r7r8r9r!r#r$r%r'r(r)rtIuIvIwIxIyIzIAIBICIDIEIFIGIHIII@ogs|oEs3G2I3I4I5IxMyMzM

1042  

1043 def to_system_device(self) -> 'cuda.core.system.Device': 

1044 """ 

1045 Get the corresponding :class:`cuda.core.system.Device` (which is used 

1046 for NVIDIA Management Library (NVML) access) for this 

1047 :class:`cuda.core.Device` (which is used for CUDA access). 

1048  

1049 The devices are mapped to one another by their UUID. 

1050  

1051 Returns 

1052 ------- 

1053 cuda.core.system.Device 

1054 The corresponding system-level device instance used for NVML access. 

1055 """ 

1056 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2dFULVLeF7F

1057  

1058 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2dFULVLeF7F

1059 raise RuntimeError( 

1060 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x" 

1061 ) 

1062  

1063 from cuda.core.system import Device as SystemDevice 2dFULVLeF7F

1064 return SystemDevice(uuid=self.uuid) 2dFULVLeF7F

1065  

1066 @property 

1067 def device_id(self) -> int: 

1068 """Return device ordinal.""" 

1069 return self._device_id 2@s[s/f!f:f#f;f$f=f%f?f'f@f(f5s6s}oNmOmSpTp|m7s8s9s~oapbp!scpdpepfp#s$sgpAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJ(KaPOHPHFn:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h/E6G|h}h~haibicidieifigihiii:H;H=H=ElNmN_KRL,E?HfIbPnNoNpNqNrNSLsNtNprU $L%HV 'H4pW lr@HX mrGpY (HZ 0 zN9f1 Qm2 3 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( 5p) Up9L* Vp6p+ Wp7p, nrpF- )H*H]H. ^H/ 8p: 5F6F)K*K+K,K)s]m^meL2H{I3HSHloinTLjikigNSfTfALLmANhNBNBLCLaL6f2n=m?m3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)j:jLnuMDM7fEMtJuJNcLegn'sOc5J6o7obLcL,g%l'l1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+EtIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIiI!LjIkI(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6lDLELP Q dmemfmgmhmimjmkmcI*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOiPiQh.HAPwM

1070  

1071 @property 

1072 def pci_bus_id(self) -> str: 

1073 """Return a PCI Bus Id string for this device.""" 

1074 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 28F{I7F

1075 return bus_id[:12].decode() 28F{I7F

1076  

1077 def can_access_peer(self, peer: Device | int) -> bool: 

1078 """Check if this device can access memory from the specified peer device. 

1079  

1080 Queries whether peer-to-peer memory access is supported between this 

1081 device and the specified peer device. 

1082  

1083 Parameters 

1084 ---------- 

1085 peer : Device | int 

1086 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID. 

1087 """ 

1088 peer = Device(peer) 

1089 cdef int d1 = <int> self.device_id 

1090 cdef int d2 = <int> peer.device_id 

1091 if d1 == d2: 

1092 return True 

1093 cdef int value = 0 

1094 with nogil: 

1095 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2)) 

1096 return bool(value) 

1097  

1098 @property 

1099 def uuid(self) -> str: 

1100 """Return a UUID for the device. 

1101  

1102 Returns 16-octets identifying the device. If the device is in 

1103 MIG mode, returns its MIG UUID which uniquely identifies the 

1104 subscribed MIG compute instance. 

1105  

1106 Note 

1107 ---- 

1108 MIG UUID is only returned when device is in MIG mode and the 

1109 driver is older than CUDA 11.4. 

1110  

1111 The UUID is cached after first access to avoid repeated CUDA API calls. 

1112  

1113 """ 

1114 cdef cydriver.CUuuid uuid 

1115 cdef cydriver.CUdevice dev 

1116 cdef bytes uuid_b 

1117 cdef str uuid_hex 

1118  

1119 if self._uuid is None: 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdFULVL8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1120 dev = self._device_id 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1121 with nogil: 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1122 IF CUDA_CORE_BUILD_MAJOR == 12: 

1123 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev)) 

1124 ELSE: # 13.0+ 

1125 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1126 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1127 uuid_hex = uuid_b.hex() 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1128 # 8-4-4-4-12 

1129 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1130 return self._uuid 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdFULVL8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1131  

1132 @property 

1133 def name(self) -> str: 

1134 """Return the device name.""" 

1135 # Use 256 characters to be consistent with CUDA Runtime 

1136 cdef int LENGTH = 256 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1137 cdef bytes name = bytes(LENGTH) 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1138 cdef char* name_ptr = name 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1139 cdef cydriver.CUdevice this_dev = self._device_id 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1140 with nogil: 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1141 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1142 name = name.split(b"\0")[0] 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1143 return name.decode() 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM

1144  

1145 @property 

1146 def properties(self) -> DeviceProperties: 

1147 """Return a :obj:`~_device.DeviceProperties` class with information about the device.""" 

1148 if self._properties is None: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)sTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

1149 self._properties = DeviceProperties._init(self._device_id) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

1150  

1151 return self._properties 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)sTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g

1152  

1153 @property 

1154 def resources(self) -> DeviceResources: 

1155 """Return the hardware resource query namespace for this device.""" 

1156 if self._resources is None: 2trUlurVlg JeKeWlXlYlZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr2lVr

1157 self._resources = DeviceResources._init(self._device_id) 2trUlurVlg JeKeWlXlYlZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr2lVr

1158 return self._resources 2trUlurVlg JeKeWlXlYlZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr2lVr

1159  

1160 @property 

1161 def compute_capability(self) -> ComputeCapability: 

1162 """Return a named tuple with 2 fields: major and minor.""" 

1163 cdef DeviceProperties prop = self.properties 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFpNfOfPfQf

1164 cached = prop._cache.get("compute_capability") 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFpNfOfPfQf

1165 if cached is not None: 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFpNfOfPfQf

1166 return cached 2a {m%n'n(n)n*n+n,n-n8o9o!o}mmgGnHng JeKePm~IcJ_H8G9G!G#G$G%G'G(GNbOb)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdb c kblbRdSd] ^ $bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe3d4d*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dmbnbXe)dYe*dd e obpb+d,ddbeb?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e^d_d_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeqbrbgeheiejekeleme!ene#eoepeqereseteuevewexeyezeAeBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp

1167 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf

1168 return prop._cache.setdefault("compute_capability", cc) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf

1169  

1170 @property 

1171 def arch(self) -> str: 

1172 """Return compute capability as a string (e.g., '75' for CC 7.5).""" 

1173 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a %n'n(n)n*n+n,n-n8o9o!omgHng JeKe_HecsIfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdb c kblbRdSd] ^ $bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2d3d4d*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dmbnb)d*dd e obpb+d,ddbeb?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d^d_d_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeqbrbgeheiejekelemeneoepeqereseteuevewexeyezeAeBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp

1174  

1175 @property 

1176 def context(self) -> Context: 

1177 """Return the :obj:`~_context.Context` associated with this device. 

1178  

1179 Note 

1180 ---- 

1181 Device must be initialized. 

1182  

1183 """ 

1184 self._check_context_initialized() 2+r.roh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_r`r:oPp@oyh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqsrs^oQpCs|oGsIsKsMsOsQs

1185 return self._context 2+r.roh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_r`r:oPp@oyh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqsrs^oQpCs|oGsIsKsMsOsQs

1186  

1187 @property 

1188 def memory_resource(self) -> MemoryResource: 

1189 """Return :obj:`~_memory.MemoryResource` associated with this device.""" 

1190 cdef int attr, device_id 

1191 if self._memory_resource is None: 2OHPH:h;h=hQHRH!O?h#O@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh.H8OwM

1192 # If the device is in TCC mode, or does not support memory pools for some other reason, 

1193 # use the SynchronousMemoryResource which does not use memory pools. 

1194 device_id = self._device_id 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H

1195 with nogil: 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H

1196 HANDLE_RETURN( 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H

1197 cydriver.cuDeviceGetAttribute( 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H

1198 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1199 ) 

1200 ) 

1201 if attr == 1: 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H

1202 from cuda.core._memory import DeviceMemoryResource 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdItiIhuiviJhKhxiyiAiLhCiEiMhGiNhIiJiLiOhPhQh.H

1203 self._memory_resource = DeviceMemoryResource(self._device_id) 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdItiIhuiviJhKhxiyiAiLhCiEiMhGiNhIiJiLiOhPhQh.H

1204 else: 

1205 from cuda.core._memory._legacy import _SynchronousMemoryResource 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFrisiIhwiJhKhziBiLhDiMhFiNhHiKiMiOhNiPhOiPiQh.H

1206 self._memory_resource = _SynchronousMemoryResource(self._device_id) 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFrisiIhwiJhKhziBiLhDiMhFiNhHiKiMiOhNiPhOiPiQh.H

1207  

1208 return self._memory_resource 2OHPH:h;h=hQHRH!O?h#O@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh.H8OwM

1209  

1210 @memory_resource.setter 

1211 def memory_resource(self, mr: MemoryResource) -> None: 

1212 from cuda.core._memory import MemoryResource 

1213 assert_type(mr, MemoryResource) 

1214 self._memory_resource = mr 

1215  

1216 @property 

1217 def default_stream(self) -> Stream: 

1218 """Return default CUDA :obj:`~_stream.Stream` associated with this device. 

1219  

1220 The type of default stream returned depends on if the environment 

1221 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1222  

1223 If set, returns a per-thread default stream. Otherwise returns 

1224 the legacy stream. 

1225  

1226 """ 

1227 return default_stream() 25s6s}oNmOm7s8s9s~oapbp!scpdpepfp#s$sgpFnZn~mBP+f,f-fuNvNwNxNyN%H'H4plr@HmrGp(HCPDPQmxnEP`KFP{KGP|KHP}KIP[HJP~KKPJHKHLPMPLHMHNPOP;sNHPP5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s5F6F)K*K+K,K]m^m#obI8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHjikigNSfTfLmhN6f1n.n=m?mMmJnRhKnSh9n!nbnqgcnrgLn#ndnuM7fMcenKmf Tb(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6lP Q dmemfmgmhmimjmkmdLJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh.H8OwM

1228  

1229 def __int__(self) -> int: 

1230 """Return device_id.""" 

1231 return self._device_id 2rMsMtM(K]m^m

1232  

1233 def __repr__(self) -> str: 

1234 return f"<Device {self._device_id} ({self.name})>" 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7GqM

1235  

1236 def __hash__(self) -> int: 

1237 return hash(self.uuid) 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbpIaIqIrI$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L

1238  

1239 def __eq__(self, other: object) -> bool: 

1240 if not isinstance(other, Device): 2,E?HU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbvLaIwLzL$jRh%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb9O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}OP Q S T %L'LWJ

1241 return NotImplemented 2,E?HzL9O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}OWJ

1242 return self._device_id == other._device_id 2,EU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbvLaIwL$jRh%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb9OP Q S T %L'L

1243  

1244 def __reduce__(self) -> tuple[object, ...]: 

1245 return Device, (self.device_id,) 2pr$L%H'H4plr@HmrGp(H9fQm`K{K|K}K[H~K5pUp9LVp6pWp7pnrpF)H*H]H^H8p5F6F)K*K+K,KDLEL

1246  

1247 def set_current(self, ctx: Context | None = None) -> Context | None: 

1248 """Set device to be used for GPU executions. 

1249  

1250 Initializes CUDA and sets the calling thread to a valid CUDA 

1251 context. By default the primary context is used, but optional `ctx` 

1252 parameter can be used to explicitly supply a :obj:`~_context.Context` object. 

1253  

1254 Providing a `ctx` causes the previous set context to be popped and returned. 

1255  

1256 Parameters 

1257 ---------- 

1258 ctx : :obj:`~_context.Context`, optional 

1259 Optional context to push onto this device's current thread stack. 

1260  

1261 Returns 

1262 ------- 

1263 :obj:`~_context.Context`, optional 

1264 Popped context. 

1265  

1266 Examples 

1267 -------- 

1268 Acts as an entry point of this object. Users always start a code by 

1269 calling this method, e.g. 

1270  

1271 >>> from cuda.core import Device 

1272 >>> dev0 = Device(0) 

1273 >>> dev0.set_current() 

1274 >>> # ... do work on device 0 ... 

1275  

1276 """ 

1277 cdef ContextHandle h_context 

1278 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1279 cdef Context prev_owned = None 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKe-KWlXlYl9xZl.K0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x/K2l+JVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1280  

1281 if ctx is not None: 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKe-KWlXlYl9xZl.K0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x/K2l+JVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1282 # TODO: revisit once Context is cythonized 

1283 assert_type(ctx, Context) 2-K.K/K+J

1284 Context_check_open(ctx) 2-K.K/K+J

1285 if ctx._device_id != self._device_id: 2-K.K/K

1286 raise RuntimeError( 

1287 "the provided context was created on the device with" 

1288 f" id={ctx._device_id}, which is different from the target id={self._device_id}" 

1289 ) 

1290 if self._has_inited and self._context is not None: 2-K.K/K

1291 prev_owned = self._context 2-K.K/K

1292 # prev_ctx is the previous context 

1293 curr_ctx = as_cu(ctx._h_context) 2-K.K/K

1294 prev_ctx = NULL 2-K.K/K

1295 with nogil: 2-K.K/K

1296 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2-K.K/K

1297 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2-K.K/K

1298 self._has_inited = True 2-K.K/K

1299 self._context = ctx # Store owning context reference 2-K.K/K

1300 if prev_ctx != NULL: 2-K.K/K

1301 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2-K.K/K

1302 return prev_owned 2-K.K/K

1303 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id) 

1304 else: 

1305 # use primary ctx 

1306 h_context = get_primary_context(self._device_id) 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1307 if h_context.get() == NULL: 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1308 HANDLE_RETURN(get_last_error()) 

1309 raise RuntimeError( 

1310 f"Failed to retain the primary context for device {self._device_id}" 

1311 ) 

1312 with nogil: 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1313 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1314 self._has_inited = True 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1315 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1316  

1317 def create_context(self, options: ContextOptions | None = None) -> Context: 

1318 """Create a new :obj:`~_context.Context` object. 

1319  

1320 Note 

1321 ---- 

1322 The newly created context will not be set as current. 

1323  

1324 Parameters 

1325 ---------- 

1326 options : :obj:`~_context.ContextOptions`, optional 

1327 Customizable dataclass for context creation options. 

1328  

1329 Returns 

1330 ------- 

1331 :obj:`~_context.Context` 

1332 Newly created context object. 

1333  

1334 """ 

1335 cdef int i 

1336 cdef object resources 

1337 cdef object res 

1338 cdef SMResource sm_res 

1339 cdef WorkqueueResource wq_res 

1340  

1341 if options is None: 2PLUlVlg loinWlXlYlZl0l1l(LQLfN2l+J

1342 raise ValueError( 2fN

1343 "options with device resources must be provided to create a green context" 

1344 ) 

1345  

1346 options = check_or_create_options(ContextOptions, options, "Context options") 2PLUlVlg loinWlXlYlZl0l1l(LQLfN2l+J

1347 if options.resources is None: 2PLUlVlg loinWlXlYlZl0l1l(LQLfN2l+J

1348 raise ValueError( 2fN

1349 "ContextOptions.resources must be provided to create a green context" 

1350 ) 

1351  

1352 resources = tuple(options.resources) 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1353 if len(resources) == 0: 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1354 raise ValueError("ContextOptions.resources must not be empty") 

1355  

1356 cdef vector[cydriver.CUdevResource] c_resources 

1357 c_resources.resize(len(resources)) 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1358  

1359 for i, res in enumerate(resources): 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1360 if isinstance(res, SMResource): 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1361 sm_res = <SMResource>res 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1362 if not sm_res._is_usable: 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J

1363 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2(L

1364 c_resources[i] = sm_res._resource 2PLUlVlg loinWlXlYlZl0l1lQL2l+J

1365 elif isinstance(res, WorkqueueResource): 2in

1366 wq_res = <WorkqueueResource>res 2in

1367 c_resources[i] = wq_res._wq_config_resource 2in

1368 else: 

1369 raise TypeError(f"Unsupported context resource type: {type(res)}") 

1370  

1371 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2PLUlVlg loinWlXlYlZl0l1lQL2l+J

1372 c_resources.data(), 

1373 <unsigned int>(c_resources.size()), 

1374 <cydriver.CUdevice>(self._device_id), 2PLUlVlg loinWlXlYlZl0l1lQL2l+J

1375 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM), 

1376 ) 

1377 if h_green.get() == NULL: 2PLUlVlg loinWlXlYlZl0l1lQL2l+J

1378 HANDLE_RETURN(get_last_error()) 

1379 raise RuntimeError("Failed to create CUDA green context") 

1380  

1381 return Context._from_green_ctx(Context, h_green, self._device_id) 2PLUlVlg loinWlXlYlZl0l1lQL2l+J

1382  

1383 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream: 

1384 """Create a :obj:`~_stream.Stream` object. 

1385  

1386 New stream objects can be created in two different ways: 

1387  

1388 1) Create a new CUDA stream with customizable ``options``. 

1389 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol. 

1390  

1391 Option (2) internally holds a reference to the foreign object 

1392 such that the lifetime is managed. 

1393  

1394 Note 

1395 ---- 

1396 Device must be initialized. 

1397  

1398 Parameters 

1399 ---------- 

1400 obj : :obj:`~_stream.IsStreamType`, optional 

1401 Any object supporting the ``__cuda_stream__`` protocol. 

1402 options : :obj:`~_stream.StreamOptions`, optional 

1403 Customizable dataclass for stream creation options. 

1404  

1405 Returns 

1406 ------- 

1407 :obj:`~_stream.Stream` 

1408 Newly created stream object. 

1409  

1410 """ 

1411 self._check_context_initialized() 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%IonpnqnpoXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s4sVH4GWHXH`J{J)I*I}oNmOm|mwoxo~oapbpcpdpepfpgpYH|JyozoAoBoCoDo%sAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJWLlm}J,I-I~JaKEoFoGobKcKdKeKfKXLgK.I/IhKiKHoIoJojKkKlKmKnKCNoK:I;IpKqKKoLoMorKsKtKuKvKYLmmOHPHNoZL0LZH0H:mrnOo1Hsntnunvn}mwn;m:K:h;h;K=hQH/nRH:n?h@h;nFM[hGM]h^h=K_h5G`h?K{h=n?n@n6G@K|h[K}h]K~h^Kaibicidieifigihiii[n]n^n_n`n{n|n}n~naobocoENdoFNeofoGNgohoiojokolNmNnNoNpNqNrNwKxKsNtNuNvNwNxNyN$H9f[m1L2L3L4L5L6L7L8LHMYNZNyKzKAKBKCKDKEK|IMnjb_mFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnhOiOjOkOlOmOnOoOpOqOrOsOtOR Pm_Hzn`mNnjnOnPnQnAnBnuOvOIMwOJMxOyOKMLMzOAOBOMMCONMOMPMQMRMSMTMUMVMDOWMXMYMZMEO0M1MFOGOHOIO2MJO3MKOLO4M5MMONOOO6MPO7M8M9M!M#M$M%M'M(MQO)M*M+M,MRO-M.MSOTOUOVO/MWO:MXOYO;M=MZO0O1O?M2O@M[M]M^M_M`M{M|M}M3O~MaNbNcN4OdNeN5O6ORnCnSnLmTnUnVnWnXnYn.nDMDn7OKmEMEntJuJ,g%l'l#L*r,r-r/r{rth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfshsssDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsS T DsFsHsJsLsNsPsRsSKAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#K$KWJ%K'K*sJDCJDJEJ4HGJwM

1412 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%IonpnqnpoXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s4sVH4GWHXH`J{J)I*I}oNmOm|mwoxo~oapbpcpdpepfpgpYH|JyozoAoBoCoDo%sAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJWLlm}J,I-I~JaKEoFoGobKcKdKeKfKXLgK.I/IhKiKHoIoJojKkKlKmKnKCNoK:I;IpKqKKoLoMorKsKtKuKvKYLmmOHPHNoZL0LZH0H:mrnOo1Hsntnunvn}mwn;m:K:h;h;K=hQH/nRH:n?h@h;nFM[hGM]h^h=K_h5G`h?K{h=n?n@n6G@K|h[K}h]K~h^Kaibicidieifigihiii[n]n^n_n`n{n|n}n~naobocoENdoFNeofoGNgohoiojokolNmNnNoNpNqNrNwKxKsNtNuNvNwNxNyN$H9f[m1L2L3L4L5L6L7L8LHMYNZNyKzKAKBKCKDKEK|IMnjb_mFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnhOiOjOkOlOmOnOoOpOqOrOsOtOR Pm_Hzn`mNnjnOnPnQnAnBnuOvOIMwOJMxOyOKMLMzOAOBOMMCONMOMPMQMRMSMTMUMVMDOWMXMYMZMEO0M1MFOGOHOIO2MJO3MKOLO4M5MMONOOO6MPO7M8M9M!M#M$M%M'M(MQO)M*M+M,MRO-M.MSOTOUOVO/MWO:MXOYO;M=MZO0O1O?M2O@M[M]M^M_M`M{M|M}M3O~MaNbNcN4OdNeN5O6ORnCnSnLmTnUnVnWnXnYn.nDMDn7OKmEMEntJuJ,g%l'l#L*r,r-r/r{rth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfshsssDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsS T DsFsHsJsLsNsPsRsSKAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#K$KWJ%K'K*sJDCJDJEJ4HGJwM

1413  

1414 def create_event(self, options: EventOptions | None = None) -> Event: 

1415 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`. 

1416  

1417 Note 

1418 ---- 

1419 Device must be initialized. 

1420  

1421 Parameters 

1422 ---------- 

1423 options : :obj:`EventOptions`, optional 

1424 Customizable dataclass for event creation options. 

1425  

1426 Returns 

1427 ------- 

1428 :obj:`~_event.Event` 

1429 Newly created event object. 

1430  

1431 """ 

1432 self._check_context_initialized() 2'IUfVfWfXfYfZf0f1f2f3f4f5fYJ}q(I)I*I~q+I|m,I-IZJ0J1J2J.I/I:I;IHM3J|I_m4Jhn}I9p!p#p$p%p'p(p-g.glimiYbZb)p*p.o/o+p,p-p/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlq;o=o?omqnqoq}g~goipi4b5bpqqq[o]orqsqtqahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVq_o`o{oWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q

1433 cdef Context ctx = self._context 2'IUfVfWfXfYfZf0f1f2f3f4f5fYJ}q(I)I*I~q+I|m,I-IZJ0J1J2J.I/I:I;IHM3J|I_m4Jhn}I9p!p#p$p%p'p(p-g.glimiYbZb)p*p.o/o+p,p-p/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlq;o=o?omqnqoq}g~goipi4b5bpqqq[o]orqsqtqahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVq_o`o{oWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q

1434 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2'IUfVfWfXfYfZf0f1f2f3f4f5fYJ}q(I)I*I~q+I|m,I-IZJ0J1J2J.I/I:I;IHM3J|I_m4Jhn}I9p!p#p$p%p'p(p-g.glimiYbZb)p*p.o/o+p,p-p/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlq;o=o?omqnqoq}g~goipi4b5bpqqq[o]orqsqtqahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVq_o`o{oWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q

1435  

1436 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer: 

1437 """Allocate device memory from a specified stream. 

1438  

1439 Allocates device memory of `size` bytes on the specified `stream` 

1440 using the memory resource currently associated with this Device. 

1441  

1442 Note 

1443 ---- 

1444 Device must be initialized. 

1445  

1446 Parameters 

1447 ---------- 

1448 size : int 

1449 Number of bytes to allocate. 

1450 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

1451 Keyword-only. The stream establishing the stream ordering semantic. 

1452 Must be passed explicitly; pass ``self.default_stream`` to use 

1453 the default stream. 

1454  

1455 Returns 

1456 ------- 

1457 :obj:`~_memory.Buffer` 

1458 Newly created buffer object. 

1459  

1460 """ 

1461 self._check_context_initialized() 2]m^mSHloinjiki(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm

1462 return self.memory_resource.allocate(size, stream=stream) 2]m^mSHloinjiki(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm

1463  

1464 def sync(self) -> None: 

1465 """Synchronize the device. 

1466  

1467 Note 

1468 ---- 

1469 Device must be initialized. 

1470  

1471 """ 

1472 self._check_context_initialized() 25G6GDNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN0N1N2N3N4N5N6N7N8N9N!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~NaObOcOdOeOfOgO]m^m`mjnIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNLm.n=m?mMmuMKmf TbP Q

1473 handle_return(runtime.cudaDeviceSynchronize()) 25G6GDNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN0N1N2N3N4N5N6N7N8N9N!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~NaObOcOdOeOfOgO]m^m`mjnIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNLm.n=m?mMmuMKmf TbP Q

1474  

1475 def create_graph_builder(self) -> GraphBuilder: 

1476 """Create a new :obj:`~graph.GraphBuilder` object. 

1477  

1478 Returns 

1479 ------- 

1480 :obj:`~graph.GraphBuilder` 

1481 Newly created graph builder object. 

1482  

1483 """ 

1484 from cuda.core.graph._graph_builder import GraphBuilder 26I7I8IknlnRmSmeITmmn9I!IUmnn{m#IVm$IWm%IonpnqnXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m4GrMsMtMQJRJSJ:mrnsntnunvn}mwn;mFMGMAJ*s

1485  

1486 self._check_context_initialized() 26I7I8IknlnRmSmeITmmn9I!IUmnn{m#IVm$IWm%IonpnqnXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m4GrMsMtMQJRJSJ:mrnsntnunvn}mwn;mFMGMAJ*s

1487 return GraphBuilder._init(self.create_stream()) 26I7I8IknlnRmSmeITmmn9I!IUmnn{m#IVm$IWm%IonpnqnXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m4GrMsMtMQJRJSJ:mrnsntnunvn}mwn;mFMGMAJ*s

1488  

1489 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray: 

1490 """Create an :obj:`~cuda.core.texture.OpaqueArray` on the current device. 

1491  

1492 Allocates an opaque, hardware-laid-out CUDA array for texture/surface 

1493 access. The array is created in the current CUDA context, so make this 

1494 device current with :meth:`set_current` before calling (mirroring 

1495 :meth:`create_stream` / :meth:`create_event`). 

1496  

1497 Note 

1498 ---- 

1499 Device must be initialized. 

1500  

1501 Parameters 

1502 ---------- 

1503 options : :obj:`~cuda.core.texture.OpaqueArrayOptions` 

1504 Allocation options (shape, format, channels, surface flag). 

1505  

1506 Returns 

1507 ------- 

1508 :obj:`~cuda.core.texture.OpaqueArray` 

1509 Newly created opaque array. 

1510  

1511 .. versionadded:: 1.1.0 

1512 """ 

1513 from cuda.core.texture._array import _create_opaque_array 2KILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HPIQISI|HTIVIWIXIYITH

1514  

1515 self._check_context_initialized() 2KILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HPIQISI|HTIVIWIXIYITH

1516 return _create_opaque_array(options) 2KILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HPIQISI|HTIVIWIXIYITH

1517  

1518 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray: 

1519 """Create a :obj:`~cuda.core.texture.MipmappedArray` on the current device. 

1520  

1521 Allocates a mipmapped CUDA array for texture/surface access across 

1522 levels. The array is created in the current CUDA context, so make this 

1523 device current with :meth:`set_current` before calling (mirroring 

1524 :meth:`create_stream` / :meth:`create_event`). 

1525  

1526 Note 

1527 ---- 

1528 Device must be initialized. 

1529  

1530 Parameters 

1531 ---------- 

1532 options : :obj:`~cuda.core.texture.MipmappedArrayOptions` 

1533 Allocation options (shape, format, channels, levels, surface flag). 

1534  

1535 Returns 

1536 ------- 

1537 :obj:`~cuda.core.texture.MipmappedArray` 

1538 Newly created mipmapped array. 

1539  

1540 .. versionadded:: 1.1.0 

1541 """ 

1542 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 24HFJ%J'J(JGJ)JRIUITH

1543  

1544 self._check_context_initialized() 24HFJ%J'J(JGJ)JRIUITH

1545 return _create_mipmapped_array(options) 24HFJ%J'J(JGJ)JRIUITH

1546  

1547 def create_texture_object( 

1548 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None 

1549 ) -> TextureObject: 

1550 """Create a :obj:`~cuda.core.texture.TextureObject` on the current device. 

1551  

1552 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` / 

1553 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d 

1554 :obj:`~cuda.core.Buffer`, wrapped in a 

1555 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for 

1556 kernel-side sampled reads. The object is created in the current CUDA 

1557 context, so make this device current with :meth:`set_current` before 

1558 calling (mirroring :meth:`create_stream` / :meth:`create_event`). 

1559  

1560 Note 

1561 ---- 

1562 Device must be initialized. 

1563  

1564 Parameters 

1565 ---------- 

1566 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1567 The memory backing the texture. 

1568 options : :obj:`~cuda.core.texture.TextureObjectOptions` 

1569 Sampling state (address/filter/read modes, normalization, etc.). 

1570  

1571 Returns 

1572 ------- 

1573 :obj:`~cuda.core.texture.TextureObject` 

1574 Newly created texture object. 

1575  

1576 .. versionadded:: 1.1.0 

1577 """ 

1578 from cuda.core.texture._texture import _create_texture_object 2KILIMINIOI4H|HTIbFUIcFVIWIXIYI*JTH

1579  

1580 self._check_context_initialized() 2KILIMINIOI4H|HTIbFUIcFVIWIXIYI*JTH

1581 return _create_texture_object(resource, options) 2KILIMINIOI4H|HTIbFUIcFVIWIXIYI*JTH

1582  

1583 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject: 

1584 """Create a :obj:`~cuda.core.texture.SurfaceObject` on the current device. 

1585  

1586 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a 

1587 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for 

1588 kernel-side typed load/store. The backing array must have been created 

1589 with ``is_surface_load_store=True``. The object is created in the 

1590 current CUDA context, so make this device current with 

1591 :meth:`set_current` before calling (mirroring :meth:`create_stream` / 

1592 :meth:`create_event`). 

1593  

1594 Note 

1595 ---- 

1596 Device must be initialized. 

1597  

1598 Parameters 

1599 ---------- 

1600 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1601 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with 

1602 ``is_surface_load_store=True``. 

1603  

1604 Returns 

1605 ------- 

1606 :obj:`~cuda.core.texture.SurfaceObject` 

1607 Newly created surface object. 

1608  

1609 .. versionadded:: 1.1.0 

1610 """ 

1611 from cuda.core.texture._surface import _create_surface_object 2PIQIaFRISI|HTH

1612  

1613 self._check_context_initialized() 2PIQIaFRISI|HTH

1614 return _create_surface_object(resource) 2PIQIaFRISI|HTH

1615  

1616  

1617cdef inline int Device_ensure_cuda_initialized() except? -1: 

1618 """Initialize CUDA driver and check version compatibility (once per process).""" 

1619 global _is_cuInit 

1620 if _is_cuInit is False: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1621 with _lock, nogil: 

1622 HANDLE_RETURN(cydriver.cuInit(0)) 

1623 _is_cuInit = True 

1624 try: 

1625 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1626 except ImportError: 

1627 pass 

1628 else: 

1629 warn_if_cuda_major_version_mismatch() 

1630 return 0 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1631  

1632  

1633cdef inline int Device_resolve_device_id(device_id) except? -1: 

1634 """Resolve device_id, defaulting to current device or 0.""" 

1635 cdef cydriver.CUdevice dev 

1636 cdef cydriver.CUcontext ctx 

1637 cdef cydriver.CUresult err 

1638 if device_id is None: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1639 with nogil: 2a ~EnhUH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o 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 yKzKAKBKCKDKmg)s]m^m3JEKTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3H|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR #obIPm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILp'oRnCnSnSfTfLmhIMpTnUnNp(oVnWnXnYnaL.f6f0n1nPo2nInQoRo.n=m?mMmqF3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnOp)oDn*o7fMcenKmf Tb|E@mfn}EEntJuJNcLe)f*fgn$n'sOc8f+o,o-oipPc5JQc6oRc7oScbLTccLUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpRpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh

1640 err = cydriver.cuCtxGetDevice(&dev) 2a ~EnhUH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o 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 yKzKAKBKCKDKmg)s]m^m3JEKTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3H|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR #obIPm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILp'oRnCnSnSfTfLmhIMpTnUnNp(oVnWnXnYnaL.f6f0n1nPo2nInQoRo.n=m?mMmqF3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnOp)oDn*o7fMcenKmf Tb|E@mfn}EEntJuJNcLe)f*fgn$n'sOc8f+o,o-oipPc5JQc6oRc7oScbLTccLUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpRpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh

1641 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ~EnhUH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o 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 yKzKAKBKCKDKmg)s]m^m3JEKTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3H|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR #obIPm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILp'oRnCnSnSfTfLmhIMpTnUnNp(oVnWnXnYnaL.f6f0n1nPo2nInQoRo.n=m?mMmqF3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnOp)oDn*o7fMcenKmf Tb|E@mfn}EEntJuJNcLe)f*fgn$n'sOc8f+o,o-oipPc5JQc6oRc7oScbLTccLUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpRpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh

1642 return int(dev) 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o 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 yKzKAKBKCKDK3JEK|I4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR bIPm~IcJ_H8G9G!G#G$G%G'G(GNbOb)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgzn`mAnBn$o%ogI'oCnTfLmhI(oaL0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndn)oDn*oMcenKmf Tb|E@mfn}EEntJuJNcLegn$n'sOcipPc5JQc6oRc7oScbLTccLUc,gVcjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCeupvpwpxpypzpApBpJICpDpEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiuiviwixiyiziAiBiCiDiEi5HFiGiHiIi6HJiKiLi7HMiNiOi,HPi-H

1643 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1644 with nogil: 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh

1645 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh

1646 assert <void*>(ctx) == NULL 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh

1647 return 0 # cudart behavior 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh

1648 else: 

1649 HANDLE_RETURN(err) 

1650 elif device_id < 0: 2a ]s^s_s`s{s|s}s~satbtctRmdtSmeteIftTmgthtitjtUmktltmtntotVmptqtrtstWmttutvtwtxtytztAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^t_t`t{t|t+s}t,s~taubucudueuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-FwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u?u/s@u[u4s]u:s^u_u`u{u|u}u~u5savbvcvdvevfvgvhvivjvkvlvmvnvovpvqv6srvsvtvuvvvwvxvyvzvAvBvCvDv}qEv(IFvGvHv~qIv+IJv}oKvNmLvOmMvNvOvPvQvRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wOH-wPH.w/w:w;w=w?w@w[w:m]w^w_w`w{w|w}w~waxbx;mcxdxex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h=n?n@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgxRL^f,E_f?H`ffI{f|f}fhx~f+fRfag,fbg-fcgSLdgegfggghgigjgkglgixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbjxkxlxmxnxoxpx]m^m=I?IpIqxvLrxaI@IwLsxqI[IxL]IyL^I7GrI_IzL`Itxux}IvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVr#xPmaJbJdJeJecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y4jSfAL5j(y6j7j8j9j2rBL!jCL#j)y*y+y,y-y.y/y:y;yoJ=ypJMm?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozqJpzqzrzsztzrJuzvzbnwzqgxzyzzzAzsJBzCzDzEzcnFzrgGzHzIzJzKzLzMzNzdnOzkr;jPzQzMcenRzSzKmTzf TbUzVzWzXz3r=jtJYzuJZzNc0z4r5r6r7r8r9r!r#r$r%r'r(r)r1zvMPc5JQc2zRc3zScTcUc,g4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.C3G/C:C;C=C?C@C[C]CUJ^C_C`C{C|CVJ}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDBJADBDCDDDEDFDGD*sHDIDJDKDLDMDNDODPDQDRDSDTDUDFJVDWDXDYDZD0D1D2D3DgH4DhH5DiH6DjH7DkH8DlH9D!DmH#DnH$DoH%DpH'DqH(D)D*DaF+D,D-D.D/DbF:D;DcF=D?D@D[D]D^D_D`D{D|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1651 raise ValueError(f"device_id must be >= 0, got {device_id}") 

1652 return device_id 2a ]s^s_s`s{s|s}s~satbtctRmdtSmeteIftTmgthtitjtUmktltmtntotVmptqtrtstWmttutvtwtxtytztAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^t_t`t{t|t+s}t,s~taubucudueuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-FwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u?u/s@u[u4s]u:s^u_u`u{u|u}u~u5savbvcvdvevfvgvhvivjvkvlvmvnvovpvqv6srvsvtvuvvvwvxvyvzvAvBvCvDv}qEv(IFvGvHv~qIv+IJv}oKvNmLvOmMvNvOvPvQvRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wOH-wPH.w/w:w;w=w?w@w[w:m]w^w_w`w{w|w}w~waxbx;mcxdxex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h=n?n@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgxRL^f,E_f?H`ffI{f|f}fhx~f+fRfag,fbg-fcgSLdgegfggghgigjgkglgixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbjxkxlxmxnxoxpx]m^m=I?IpIqxvLrxaI@IwLsxqI[IxL]IyL^I7GrI_IzL`Itxux}IvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVr#xPmaJbJdJeJecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y4jSfAL5j(y6j7j8j9j2rBL!jCL#j)y*y+y,y-y.y/y:y;yoJ=ypJMm?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozqJpzqzrzsztzrJuzvzbnwzqgxzyzzzAzsJBzCzDzEzcnFzrgGzHzIzJzKzLzMzNzdnOzkr;jPzQzMcenRzSzKmTzf TbUzVzWzXz3r=jtJYzuJZzNc0z4r5r6r7r8r9r!r#r$r%r'r(r)r1zPc5JQc2zRc3zScTcUc,g4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.C3G/C:C;C=C?C@C[C]CUJ^C_C`C{C|CVJ}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDBJADBDCDDDEDFDGD*sHDIDJDKDLDMDNDODPDQDRDSDTDUDFJVDWDXDYDZD0D1D2D3DgH4DhH5DiH6DjH7DkH8DlH9D!DmH#DnH$DoH%DpH'DqH(D)D*DaF+D,D-D.D/DbF:D;DcF=D?D@D[D]D^D_D`D{D|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1653  

1654  

1655cdef inline list Device_ensure_tls_devices(cls): 

1656 """Ensure thread-local Device singletons exist, creating if needed.""" 

1657 cdef int total 

1658 try: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1659 return _tls.devices 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E

1660 except AttributeError: 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1661 with nogil: 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1662 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1663 devices = _tls.devices = [] 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1664 for dev_id in range(total): 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1665 device = super(Device, cls).__new__(cls) 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1666 device._device_id = dev_id 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1667 device._memory_resource = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1668 device._has_inited = False 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1669 device._properties = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1670 device._resources = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1671 device._uuid = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1672 device._context = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1673 devices.append(device) 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E

1674 return devices 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!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}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E