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

477 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-29 01:38 +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 

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 

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  

65cdef class DeviceProperties: 

66 """ 

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

68  

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

70 """ 

71 cdef: 

72 int _handle 

73 dict _cache 

74  

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

76 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2hJ

77  

78 @classmethod 

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

80 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

81 self._handle = handle 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

82 self._cache = {} 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

83 return self 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

84  

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

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

87 cdef int val 

88 cdef cydriver.CUresult err 

89 with nogil: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

90 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

91 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

92 return <int>default 

93 HANDLE_RETURN(err) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

94 return val 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzcCyAaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

95  

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

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

98 cached = self._cache.get(attr) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAzCal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

99 if cached is not None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAzCal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

100 return cached 2XfYfZf0f1f2fDfzCXlorXm~zlBaAprbAunvnJzfmgmmrAeoBpBqBxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h

101 cdef int value = self._get_attribute(attr, default) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

102 self._cache[attr] = value # setdefault not needed for ints 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

103 return value 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnruAvAwAxAYzLzZzyAal0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?Ahl@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?z@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXl`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iPluh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzunvnIzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c=c?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9BkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

104  

105 @property 

106 def max_threads_per_block(self) -> int: 

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

108 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2dl^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzoBSBTBUBVBWBXBpBYBZB0B1B2B3BqB4B5B6B7B8B9B

109  

110 @property 

111 def max_block_dim_x(self) -> int: 

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

113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2TA

114  

115 @property 

116 def max_block_dim_y(self) -> int: 

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

118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2UA

119  

120 @property 

121 def max_block_dim_z(self) -> int: 

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

123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2VA

124  

125 @property 

126 def max_grid_dim_x(self) -> int: 

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

128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2XAXl

129  

130 @property 

131 def max_grid_dim_y(self) -> int: 

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

133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2a YA

134  

135 @property 

136 def max_grid_dim_z(self) -> int: 

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

138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2ZA

139  

140 @property 

141 def max_shared_memory_per_block(self) -> int: 

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

143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 22A^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzoBSBTBUBVBWBXBpBYBZB0B1B2B3BqB4B5B6B7B8B9B

144  

145 @property 

146 def total_constant_memory(self) -> int: 

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

148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2gB

149  

150 @property 

151 def warp_size(self) -> int: 

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

153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2kB

154  

155 @property 

156 def max_pitch(self) -> int: 

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

158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 21A

159  

160 @property 

161 def maximum_texture1d_width(self) -> int: 

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

163 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2$A

164  

165 @property 

166 def maximum_texture1d_linear_width(self) -> int: 

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

168 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2gl

169  

170 @property 

171 def maximum_texture1d_mipmapped_width(self) -> int: 

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

173 return self._get_cached_attribute( 2+z

174 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2+z

175 ) 

176  

177 @property 

178 def maximum_texture2d_width(self) -> int: 

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

180 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2-A

181  

182 @property 

183 def maximum_texture2d_height(self) -> int: 

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

185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2(A

186  

187 @property 

188 def maximum_texture2d_linear_width(self) -> int: 

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

190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2,A

191  

192 @property 

193 def maximum_texture2d_linear_height(self) -> int: 

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

195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2*A

196  

197 @property 

198 def maximum_texture2d_linear_pitch(self) -> int: 

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

200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2+A

201  

202 @property 

203 def maximum_texture2d_mipmapped_width(self) -> int: 

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

205 return self._get_cached_attribute( 2]k

206 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2]k

207 ) 

208  

209 @property 

210 def maximum_texture2d_mipmapped_height(self) -> int: 

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

212 return self._get_cached_attribute( 2.z

213 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2.z

214 ) 

215  

216 @property 

217 def maximum_texture3d_width(self) -> int: 

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

219 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2:A

220  

221 @property 

222 def maximum_texture3d_height(self) -> int: 

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

224 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2/A

225  

226 @property 

227 def maximum_texture3d_depth(self) -> int: 

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

229 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2.A

230  

231 @property 

232 def maximum_texture3d_width_alternate(self) -> int: 

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

234 return self._get_cached_attribute( 2/z

235 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2/z

236 ) 

237  

238 @property 

239 def maximum_texture3d_height_alternate(self) -> int: 

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

241 return self._get_cached_attribute( 2Hr

242 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2Hr

243 ) 

244  

245 @property 

246 def maximum_texture3d_depth_alternate(self) -> int: 

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

248 return self._get_cached_attribute( 2^k

249 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2^k

250 ) 

251  

252 @property 

253 def maximum_texturecubemap_width(self) -> int: 

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

255 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2;A

256  

257 @property 

258 def maximum_texture1d_layered_width(self) -> int: 

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

260 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2#A

261  

262 @property 

263 def maximum_texture1d_layered_layers(self) -> int: 

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

265 return self._get_cached_attribute( 2[k

266 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2[k

267 ) 

268  

269 @property 

270 def maximum_texture2d_layered_width(self) -> int: 

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

272 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2)A

273  

274 @property 

275 def maximum_texture2d_layered_height(self) -> int: 

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

277 return self._get_cached_attribute( 2,z

278 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2,z

279 ) 

280  

281 @property 

282 def maximum_texture2d_layered_layers(self) -> int: 

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

284 return self._get_cached_attribute( 2-z

285 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2-z

286 ) 

287  

288 @property 

289 def maximum_texturecubemap_layered_width(self) -> int: 

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

291 return self._get_cached_attribute( 2;z

292 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2;z

293 ) 

294  

295 @property 

296 def maximum_texturecubemap_layered_layers(self) -> int: 

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

298 return self._get_cached_attribute( 2:z

299 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2:z

300 ) 

301  

302 @property 

303 def maximum_surface1d_width(self) -> int: 

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

305 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 25A

306  

307 @property 

308 def maximum_surface2d_width(self) -> int: 

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

310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 27A

311  

312 @property 

313 def maximum_surface2d_height(self) -> int: 

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

315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 26A

316  

317 @property 

318 def maximum_surface3d_width(self) -> int: 

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

320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 29A

321  

322 @property 

323 def maximum_surface3d_height(self) -> int: 

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

325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2fl

326  

327 @property 

328 def maximum_surface3d_depth(self) -> int: 

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

330 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 28A

331  

332 @property 

333 def maximum_surface1d_layered_width(self) -> int: 

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

335 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 24A

336  

337 @property 

338 def maximum_surface1d_layered_layers(self) -> int: 

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

340 return self._get_cached_attribute( 2%z

341 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2%z

342 ) 

343  

344 @property 

345 def maximum_surface2d_layered_width(self) -> int: 

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

347 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2el

348  

349 @property 

350 def maximum_surface2d_layered_height(self) -> int: 

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

352 return self._get_cached_attribute( 2'z

353 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2'z

354 ) 

355  

356 @property 

357 def maximum_surface2d_layered_layers(self) -> int: 

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

359 return self._get_cached_attribute( 2(z

360 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2(z

361 ) 

362  

363 @property 

364 def maximum_surfacecubemap_width(self) -> int: 

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

366 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2!A

367  

368 @property 

369 def maximum_surfacecubemap_layered_width(self) -> int: 

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

371 return self._get_cached_attribute( 2*z

372 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2*z

373 ) 

374  

375 @property 

376 def maximum_surfacecubemap_layered_layers(self) -> int: 

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

378 return self._get_cached_attribute( 2)z

379 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2)z

380 ) 

381  

382 @property 

383 def max_registers_per_block(self) -> int: 

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

385 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2cl

386  

387 @property 

388 def clock_rate(self) -> int: 

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

390 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2WfXzcC~ 2m_k

391  

392 @property 

393 def texture_alignment(self) -> int: 

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

395 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2eB

396  

397 @property 

398 def texture_pitch_alignment(self) -> int: 

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

400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2fB

401  

402 @property 

403 def gpu_overlap(self) -> bool: 

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

405 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2IA

406  

407 @property 

408 def multiprocessor_count(self) -> int: 

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

410 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2{AXl

411  

412 @property 

413 def kernel_exec_timeout(self) -> bool: 

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

415 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2eC

416  

417 @property 

418 def integrated(self) -> bool: 

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

420 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2NA

421  

422 @property 

423 def can_map_host_memory(self) -> bool: 

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

425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2wA

426  

427 @property 

428 def compute_mode(self) -> int: 

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

430 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2dC

431  

432 @property 

433 def concurrent_kernels(self) -> bool: 

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

435 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2zA

436  

437 @property 

438 def ecc_enabled(self) -> bool: 

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

440 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2EA

441  

442 @property 

443 def pci_bus_id(self) -> int: 

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

445 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2aB

446  

447 @property 

448 def pci_device_id(self) -> int: 

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

450 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2bB

451  

452 @property 

453 def pci_domain_id(self) -> int: 

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

455 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2il

456  

457 @property 

458 def tcc_driver(self) -> bool: 

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

460 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2dB

461  

462 @property 

463 def memory_clock_rate(self) -> int: 

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

465 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2fC

466  

467 @property 

468 def global_memory_bus_width(self) -> int: 

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

470 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2GA

471  

472 @property 

473 def l2_cache_size(self) -> int: 

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

475 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2PA

476  

477 @property 

478 def max_threads_per_multiprocessor(self) -> int: 

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

480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 23A^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz

481  

482 @property 

483 def unified_addressing(self) -> bool: 

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

485 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a hB

486  

487 @property 

488 def compute_capability_major(self) -> int: 

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

490 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnrzC~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf

491  

492 @property 

493 def compute_capability_minor(self) -> int: 

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

495 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnral~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf

496  

497 @property 

498 def global_l1_cache_supported(self) -> bool: 

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

500 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2FA

501  

502 @property 

503 def local_l1_cache_supported(self) -> bool: 

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

505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2QA

506  

507 @property 

508 def max_shared_memory_per_multiprocessor(self) -> int: 

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

510 return self._get_cached_attribute( 2$z^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz

511 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2$z^z_z`z{z|z}zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz

512 ) 

513  

514 @property 

515 def max_registers_per_multiprocessor(self) -> int: 

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

517 return self._get_cached_attribute( 2!zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz

518 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2!zfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwz

519 ) 

520  

521 @property 

522 def managed_memory(self) -> bool: 

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

524 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fRA

525  

526 @property 

527 def multi_gpu_board(self) -> bool: 

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

529 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2^A

530  

531 @property 

532 def multi_gpu_board_group_id(self) -> int: 

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

534 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2_A

535  

536 @property 

537 def host_native_atomic_supported(self) -> bool: 

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

539 return bool( 27z

540 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 27z

541 ) 

542  

543 @property 

544 def single_to_double_precision_perf_ratio(self) -> int: 

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

546 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2gC

547  

548 @property 

549 def pageable_memory_access(self) -> bool: 

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

551 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2~A

552  

553 @property 

554 def concurrent_managed_access(self) -> bool: 

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

556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2XfYfZf0f1f2f$f%f'f(f)f*f+f,f-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fAA_k{f|f}fbnWmor3mcn4mXmdnenVl~lfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzqn'm

557  

558 @property 

559 def compute_preemption_supported(self) -> bool: 

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

561 return bool( 20z

562 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 20z

563 ) 

564  

565 @property 

566 def can_use_host_pointer_for_registered_mem(self) -> bool: 

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

568 return bool( 2Lz

569 self._get_cached_attribute( 2Lz

570 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2Lz

571 ) 

572 ) 

573  

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

575  

576 @property 

577 def cooperative_launch(self) -> bool: 

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

579 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2BAXl

580  

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

582  

583 @property 

584 def max_shared_memory_per_block_optin(self) -> int: 

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

586 return self._get_cached_attribute( 2#z

587 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2#z

588 ) 

589  

590 @property 

591 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

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

593 return bool( 2,k

594 self._get_cached_attribute( 2,k

595 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2,k

596 ) 

597 ) 

598  

599 @property 

600 def direct_managed_mem_access_from_host(self) -> bool: 

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

602 return bool( 2Nz

603 self._get_cached_attribute( 2Nz

604 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2Nz

605 ) 

606 ) 

607  

608 @property 

609 def virtual_memory_management_supported(self) -> bool: 

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

611 return bool( 2VzJzfmgmmrAe'p

612 self._get_cached_attribute( 2VzJzfmgmmrAe'p

613 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2VzJzfmgmmrAe'p

614 ) 

615 ) 

616  

617 @property 

618 def handle_type_posix_file_descriptor_supported(self) -> bool: 

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

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

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

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

623 ) 

624 ) 

625  

626 @property 

627 def handle_type_win32_handle_supported(self) -> bool: 

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

629 return bool( 24z

630 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 24z

631 ) 

632  

633 @property 

634 def handle_type_win32_kmt_handle_supported(self) -> bool: 

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

636 return bool( 2Qz

637 self._get_cached_attribute( 2Qz

638 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2Qz

639 ) 

640 ) 

641  

642 @property 

643 def max_blocks_per_multiprocessor(self) -> int: 

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

645 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2WA

646  

647 @property 

648 def generic_compression_supported(self) -> bool: 

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

650 return bool( 21z

651 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 21z

652 ) 

653  

654 @property 

655 def max_persisting_l2_cache_size(self) -> int: 

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

657 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 20A

658  

659 @property 

660 def max_access_policy_window_size(self) -> int: 

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

662 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2SA

663  

664 @property 

665 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

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

667 return bool( 2Oz

668 self._get_cached_attribute( 2Oz

669 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2Oz

670 ) 

671 ) 

672  

673 @property 

674 def reserved_shared_memory_per_block(self) -> int: 

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

676 return self._get_cached_attribute( 2?z

677 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2?z

678 ) 

679  

680 @property 

681 def sparse_cuda_array_supported(self) -> bool: 

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

683 return bool( 2@z

684 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2@z

685 ) 

686  

687 @property 

688 def read_only_host_register_supported(self) -> bool: 

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

690 return bool( 2=z

691 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2=z

692 ) 

693  

694 @property 

695 def memory_pools_supported(self) -> bool: 

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

697 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2LrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q_q`q{q|q}q~qarbrmAnAoApAqArA6fXf7hKfLf8hse9h!h#h$h%h7fYf'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf{hOfPf|hue}h~haibici9f0fdiQfRfeivefigihiiiji!f1fkiSfTfliweminioipiqi#f2friUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisAtAcrdrer7p8pMnTlUlfrgrhrNnOnPnirQnRnSnTnjrkrUnlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%iV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb@A{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~l5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGz=iqnbA'm$pYmZmCbDbEb?iFb@i[i]i^i_i`i{i|i}i~iBeZg0gxhajbjcjCeyhzhdjejGbHbIbJbKbfjgjhjijjj_g`g{g|g}gFfGfHfIfJfAhDe1g2gBhkjljmjEeChDhnjoj3g4g5g6g7gFe8g9gpjqjrjEhFhsjtjujvjwjxjyj6b7b8b9b!bHeIeJezjAjBjCjDjKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#b$b%b'b(bOjPjQjRjSj~gahbhchdhHhIhJhKhLhOe'g(gMhTjUjVjPeNhOhWjXjRbSbTbUbVbYjZj0j1j2jehfhghhhihohphqhrhshPhQe)g*gQh3j4j5jReRhSh6j7j+g,g-g.g/gSe:g;g8j9j!jThUh#j$j%j'j(j)j*j-b.b/b:b;bUeVeWe+j,j-j.j/jXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b?b@b[b]b{j|j}j~jakjhkhlhmhnhP Q T U bkckdkekfkWhXhYhZh0hgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkOl

698  

699 @property 

700 def gpu_direct_rdma_supported(self) -> bool: 

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

702 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2blAe'p

703  

704 @property 

705 def gpu_direct_rdma_flush_writes_options(self) -> int: 

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

707 return self._get_cached_attribute( 22z

708 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 22z

709 ) 

710  

711 @property 

712 def gpu_direct_rdma_writes_ordering(self) -> int: 

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

714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2HA

715  

716 @property 

717 def mempool_supported_handle_types(self) -> int: 

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

719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2[A

720  

721 @property 

722 def deferred_mapping_cuda_array_supported(self) -> bool: 

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

724 return bool( 2Mz

725 self._get_cached_attribute( 2Mz

726 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2Mz

727 ) 

728 ) 

729  

730 @property 

731 def numa_config(self) -> int: 

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

733 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2|A

734  

735 @property 

736 def numa_id(self) -> int: 

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

738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2}A

739  

740 @property 

741 def multicast_supported(self) -> bool: 

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

743 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2`A

744  

745 @property 

746 def surface_alignment(self) -> int: 

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

748 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2cB

749  

750 @property 

751 def async_engine_count(self) -> int: 

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

753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2uA

754  

755 @property 

756 def can_tex2d_gather(self) -> bool: 

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

758 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2xA

759  

760 @property 

761 def maximum_texture2d_gather_width(self) -> int: 

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

763 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2'A

764  

765 @property 

766 def maximum_texture2d_gather_height(self) -> int: 

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

768 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2%A

769  

770 @property 

771 def stream_priorities_supported(self) -> bool: 

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

773 return bool( 2[z

774 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2[z

775 ) 

776  

777 @property 

778 def can_flush_remote_writes(self) -> bool: 

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

780 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2vA

781  

782 @property 

783 def host_register_supported(self) -> bool: 

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

785 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2MA

786  

787 @property 

788 def timeline_semaphore_interop_supported(self) -> bool: 

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

790 return bool( 2Uz

791 self._get_cached_attribute( 2Uz

792 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Uz

793 ) 

794 ) 

795  

796 @property 

797 def cluster_launch(self) -> bool: 

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

799 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2yA

800  

801 @property 

802 def can_use_64_bit_stream_mem_ops(self) -> bool: 

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

804 return bool( 2Yz

805 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2Yz

806 ) 

807  

808 @property 

809 def can_use_stream_wait_value_nor(self) -> bool: 

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

811 return bool( 2Zz

812 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2Zz

813 ) 

814  

815 @property 

816 def dma_buf_supported(self) -> bool: 

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

818 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2DA

819  

820 # Start of CUDA 12 device attributes 

821  

822 @property 

823 def ipc_event_supported(self) -> bool: 

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

825 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2OA

826  

827 @property 

828 def mem_sync_domain_count(self) -> int: 

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

830 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2hl

831  

832 @property 

833 def tensor_map_access_supported(self) -> bool: 

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

835 return bool( 2]zmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWg

836 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2]zmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWg

837 ) 

838  

839 @property 

840 def handle_type_fabric_supported(self) -> bool: 

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

842 return bool( 23z

843 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 23z

844 ) 

845  

846 @property 

847 def unified_function_pointers(self) -> bool: 

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

849 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2iB

850  

851 @property 

852 def mps_enabled(self) -> bool: 

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

854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2]A

855  

856 @property 

857 def host_numa_id(self) -> int: 

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

859 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2l m n o p q r s t u v w x y z A B C D E F G k H I J K L M LAXm,ivh-i.i/i:iwh;iYgunvn

860  

861 @property 

862 def d3d12_cig_supported(self) -> bool: 

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

864 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2CA

865  

866 @property 

867 def mem_decompress_algorithm_mask(self) -> int: 

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

869 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2=A

870  

871 @property 

872 def mem_decompress_maximum_length(self) -> int: 

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

874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2?A

875  

876 @property 

877 def vulkan_cig_supported(self) -> bool: 

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

879 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2jB

880  

881 @property 

882 def gpu_pci_device_id(self) -> int: 

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

884  

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

886 """ 

887 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2JA

888  

889 @property 

890 def gpu_pci_subsystem_id(self) -> int: 

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

892  

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

894 """ 

895 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2KA

896  

897 @property 

898 def host_numa_virtual_memory_management_supported(self) -> bool: 

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

900 return bool( 2Rz

901 self._get_cached_attribute( 2Rz

902 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Rz

903 ) 

904 ) 

905  

906 @property 

907 def host_numa_memory_pools_supported(self) -> bool: 

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

909 return bool( 28z

910 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 28z

911 ) 

912  

913 # Start of CUDA 13 device attributes 

914  

915 @property 

916 def host_numa_multinode_ipc_supported(self) -> bool: 

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

918 return bool( 29z

919 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 29z

920 ) 

921  

922 @property 

923 def host_memory_pools_supported(self) -> bool: 

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

925 return bool( 2l m n o p q r s t u v w x y z A B C D E F G k H I J K L M 6zemkn,i$mvhln-imn.inn/ion:i%mwhpn;irn(mZm)mWlYg7eHzunvnIz

926 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2l m n o p q r s t u v w x y z A B C D E F G k H I J K L M 6zemkn,i$mvhln-imn.inn/ion:i%mwhpn;irn(mZm)mWlYg7eHzunvnIz

927 ) 

928  

929 @property 

930 def host_virtual_memory_management_supported(self) -> bool: 

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

932 return bool( 2Sz

933 self._get_cached_attribute( 2Sz

934 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Sz

935 ) 

936 ) 

937  

938 @property 

939 def host_alloc_dma_buf_supported(self) -> bool: 

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

941 return bool( 25z

942 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 25z

943 ) 

944  

945 @property 

946 def only_partial_host_native_atomic_supported(self) -> bool: 

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

948 return bool( 2Tz

949 self._get_cached_attribute( 2Tz

950 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2Tz

951 ) 

952 ) 

953  

954  

955class Device: 

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

957  

958 This is a singleton object that helps ensure interoperability 

959 across multiple libraries imported in the process to both see 

960 and use the same GPU device. 

961  

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

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

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

965 this device's context. 

966  

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

968 for a specified device. 

969  

970 Note 

971 ---- 

972 Will not initialize the GPU. 

973  

974 Parameters 

975 ---------- 

976 device_id : int, optional 

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

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

979  

980 """ 

981 __slots__ = ( 

982 "_device_id", 

983 "_memory_resource", 

984 "_has_inited", 

985 "_properties", 

986 "_resources", 

987 "_uuid", 

988 "_context", 

989 "__weakref__", 

990 ) 

991  

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

993 if isinstance(device_id, Device): 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/Dpulrquru}GQi~GRiaHSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ $Gp 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;ueH$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCb]GDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

994 return device_id 2drerMnTlUlfrgrhrNnOnPnirQnRnSnTnjrkrUn}G~GaHhm*mimjmkm+mlmmmV iCW jCX Y 'nZ $G0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - mBnB. / : JrKrtDuDvDwDVmVGNlWGXG}l5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,m=ibAeHYmfmgmmrAeRFBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDpD]GqDrDP Q

995  

996 Device_ensure_cuda_initialized() 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

997 device_id = Device_resolve_device_id(device_id) 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

998 devices = Device_ensure_tls_devices(cls) 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

999  

1000 try: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1001 return devices[device_id] 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1002 except IndexError: 2SGTG

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

1004  

1005 def _check_context_initialized(self) -> None: 

1006 if not self._has_inited: 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrKfLfMfNfOfPfQfRfSfTfUfVfcr$F*D%F'F(F)FOF7p+D,D-D8p.DMnTlUldm]m^mNnOnPnQnRnSnTnUn*F+F_m`m{m|m}m~mlr}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJF,F-F{lwman.Fxmymzm?BAm|lkHlH;H=HmH?H@H/F:FnHoH[H]H^H_H`HhC|H}H~HaIbIcIdIeIfIgIhIiIWfjIXzkI(G)G*G+G,G-G.G/GjHlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUI-mVI8GWIFuXIGFYImBnB!BZI'G0I1I2I3I4IJrKrtDuDvDwD;F=F?F@F[F]FEmFmPF^F0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUmBCCCDCECFCGCHCICJCKCLCMCNClC)n1m_k#BnmXlsC$B%Byzzz5I6IpH7IqH8I9IrHsH!I#I$ItH%IuHvHwHxHyHzHAHBHCH'IDHEHFHGH(IHHIH)I*I+I,IJH-IKH.I/ILHMH:I;I=INH?IOHPHQHRHSHTHUHVHWH@IXHYHZH0H[I1H2H]I^I_I`I3H{I4H|I}I5H6H~IaJbJ7HcJ8H9H!H#H$H%H'H(H)HdJ*H+H,H-HeJ.H/HfJgJNlVl}l~lemeHmCWlYg7e(E*E^g-k.k^GjltqPoQoRovqklwqllxqSoToUoyqZg0gGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMbVoWo_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqXgZlQlRlSl0l1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;o~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQqvlRq=o?o@oSq'g(gRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb[o]oeh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1q}kFoFnGnHnGo)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qP Q T U Fl#qvpwpxp$qGl%qypzpAp'qHl(qBpCpDp)qIl*qEpFpGp+qJl,qHpIpJp-qKl.qKpLpMp/qLl:qNpOpPp;qMl=qQpRpSp?qhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGxGNFyGzGTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFcFZF0F1FdF2FYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BbC

1007 raise CUDAError( 

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

1009 ) 

1010  

1011  

1012 @classmethod 

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

1014 """ 

1015 Query the available device instances. 

1016  

1017 Returns 

1018 ------- 

1019 tuple of Device 

1020 A tuple containing instances of available devices. 

1021 """ 

1022 from cuda.core import system 2(pDf*p+p,p(nOofqgqhqiqjqkqlqmqnqoqpqqqrqsqBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDOl

1023 total = system.get_num_devices() 2(pDf*p+p,p(nOofqgqhqiqjqkqlqmqnqoqpqqqrqsqBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDOl

1024 return tuple(cls(device_id) for device_id in range(total)) 2(pDf*p+p,p(nOofqgqhqiqjqkqlqmqnqoqpqqqrqsqBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDOl

1025  

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

1027 """ 

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

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

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

1031  

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

1033  

1034 Returns 

1035 ------- 

1036 cuda.core.system.Device 

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

1038 """ 

1039 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2cA

1040  

1041 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2cA

1042 raise RuntimeError( 

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

1044 ) 

1045  

1046 from cuda.core.system import Device as SystemDevice 2cA

1047 return SystemDevice(uuid=self.uuid) 2cA

1048  

1049 @property 

1050 def device_id(self) -> int: 

1051 """Return device ordinal.""" 

1052 return self._device_id 2LrMr6fXf7fYf8fZf9f0f!f1f#f2fdrerMnTlUlIoJodmfrgrhrNnOnPnirQnRnSnTnjrkrUn}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJFBGiJkHlHCG!GxzpCSCjJ;H=HmH?H@H#GnHoH)pV _GiCW jCKoX :GqCY ;G'nZ $G0 Wf1 Yl2 3 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( Lo) =G?G* @Gk Mo+ [G-m, 8GFu- mBnB!B. rC/ No: JrKrtDuDvDwDnrEmFmOown~D@BlC)n1m%GyzzzEfVmVGNlWGXGKGWm4m}l~l5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,m=ibAeHYm(E*EJzfmgmmrAeRFsntnLGMG^g-k.kfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDpD]GqDrDjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kzrArP Q FlGlHlIlJlKlLlMlOCgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)k*k+kPCIJQCbC

1053  

1054 @property 

1055 def pci_bus_id(self) -> str: 

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

1057 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2(n~DcA

1058 return bus_id[:12].decode() 2(n~DcA

1059  

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

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

1062  

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

1064 device and the specified peer device. 

1065  

1066 Parameters 

1067 ---------- 

1068 peer : Device | int 

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

1070 """ 

1071 peer = Device(peer) 

1072 cdef int d1 = <int> self.device_id 

1073 cdef int d2 = <int> peer.device_id 

1074 if d1 == d2: 

1075 return True 

1076 cdef int value = 0 

1077 with nogil: 

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

1079 return bool(value) 

1080  

1081 @property 

1082 def uuid(self) -> str: 

1083 """Return a UUID for the device. 

1084  

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

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

1087 subscribed MIG compute instance. 

1088  

1089 Note 

1090 ---- 

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

1092 driver is older than CUDA 11.4. 

1093  

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

1095  

1096 """ 

1097 cdef cydriver.CUuuid uuid 

1098 cdef cydriver.CUdevice dev 

1099 cdef bytes uuid_b 

1100 cdef str uuid_hex 

1101  

1102 if self._uuid is None: 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACJGyDcA@B(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1103 dev = self._device_id 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1104 with nogil: 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1105 IF CUDA_CORE_BUILD_MAJOR == 12: 

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

1107 ELSE: # 13.0+ 

1108 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1109 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1110 uuid_hex = uuid_b.hex() 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1111 # 8-4-4-4-12 

1112 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACyDcA@B(ith)i*i+iPluh,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1113 return self._uuid 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb(nxDACJGyDcA@B(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1114  

1115 @property 

1116 def name(self) -> str: 

1117 """Return the device name.""" 

1118 # Use 256 characters to be consistent with CUDA Runtime 

1119 cdef int LENGTH = 256 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1120 cdef bytes name = bytes(LENGTH) 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1121 cdef char* name_ptr = name 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1122 cdef cydriver.CUdevice this_dev = self._device_id 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1123 with nogil: 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1124 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1125 name = name.split(b"\0")[0] 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1126 return name.decode() 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBwnRm

1127  

1128 @property 

1129 def properties(self) -> DeviceProperties: 

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

1131 if self._properties is None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzm?BAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnrKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

1132 self._properties = DeviceProperties._init(self._device_id) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i{lwmanxmymzmAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbalblcldlelfl[kgl]k^kHrhl,kil~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWm3mcn4mXmdnenVl}l~lem5m(ith6m)i7m*i8m+iuh9mfn!mAzgnBzhnCzinDzEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrn'm(m$pYmZm)mWlYg7eHzIzfmgmmrAeWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

1133  

1134 return self._properties 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMrgAhAiAjAkA1h2h3h4h5h6hlA@q[q]q^q;mBrCrIr=m?m@m[m_q`q{q|q}q~qarbrDrmAnAoApAqArATpUp6fXf1e7hKfLf8hse9h!h#h$h%h7fYf2e'hMfNf(hte)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|hue}h~haibici9f0f4ediQfRfeivefigihiiiji!f1f5ekiSfTfliweminioipiqi#f2f6eriUfVfsixetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiErsAtAVpFrcrGrWpXpYpZp0p1pdr2p3p4p5p6per7p8pMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p_m`m{m|m}m~mlrQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9i!i#i$i%i{lwmanxmymzm?BAm|l$f%f'f(f)f*f+f,fVn-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fV l W m X n Y o Z p 0 q Wf1 Xzr jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBb%pnrKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkB~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fEfVm'iNl!p#pbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(m$pYmZm)mWlYg7eHzunvnIzJzfmgmmrAe'pWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@i8e[i]iDd9e^i_iEdFd`i!e{i|iGd#e}i~iHdBeZg0gxhajbjcjCeyhzhdjejGbg HbIbc h JbKbd LbMb$e%e'e(e)efj*egjhj+eijjj_g4b`g{gab5b|g}gbbFfR GfHfN S IfJfO AhDe1g2gBhkjljmjEeChDhnjoj3gNb4g5g; Ob6g7g= Fe8g9gpjqjrjEhFhsjtjuj,evjwj-exjyj6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eAjBjSd@eCjDjTdKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePjQj]eRjSj~g)bahbhcb*bchdhdbHhMeIhJh5dNeKhLh6dOe'g(gMhTjUjVjPeNhOhWjXjRbi SbTbe j UbVbf WbXb^e_e`e{e|eYj}eZj0j~e1j2jeh+bfhgheb,bhhihfboh7dphqhYb8drhshZbPhQe)g*gQh3j4j5jReRhSh6j7j+g0b,g-g^ 1b.g/g_ Se:g;g8j9j!jThUh#j$j%jaf'j(jbf)j*j-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhf,j-j,dif.j/j-dXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|j}jkf~jakjh^bkhlhgb_bmhnhhbP Q T U `d{dbklfckdk|dmfekfk}d~daebeWhZeXhYhce0eZh0hdegknfhkikeeofjkkkfelkpfmknkgeqfokpkheqkrfrkskiesftkukjevktfwkxkkeufykzkleAkvfBkCkmewfDkEkneoeFkxfGkHkpeyfIkJkqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nOlmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWg

1135  

1136 @property 

1137 def resources(self) -> DeviceResources: 

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

1139 if self._resources is None: 2-pKkLkb yezeMkNkOkPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq

1140 self._resources = DeviceResources._init(self._device_id) 2-pKkLkb yezeMkNkOkPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq

1141 return self._resources 2-pKkLkb yezeMkNkOkPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq

1142  

1143 @property 

1144 def compute_capability(self) -> ComputeCapability: 

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

1146 cdef DeviceProperties prop = self.properties 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzm?BAm|lWfXz%pnr~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nzfAfBfCf

1147 cached = prop._cache.get("compute_capability") 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzm?BAm|lWfXz%pnr~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nzfAfBfCf

1148 if cached is not None: 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzm?BAm|lWfXz%pnr~ 2mUmb yezexCyC_kXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nzfAfBfCf

1149 return cached 2a hm*mimjmkm+mlmmmBmCmDm?B%pUmb yezeXlfEiEsCsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c-E=c.E?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd/EldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdc d abbbN O ; = 6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGeSdTd#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dcbdbMe5dNe6de f ebfbYbZb^ _ -b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe,d-d=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_dgbhb`d{d|d}d~daebeZece0edeeefegeheiejekelemeneoepeqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%n

1150 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnr~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf

1151 return prop._cache.setdefault("compute_capability", cc) 2a ]gompm1l2l3lqm4lrm.msm5l/m6l:mtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l;mBrCrIr=m?m@m[mDrTpUp1ese2ete3eue4eve5ewe6exeErVpFrGrWpXpYpZp0p1p2p3p4p5p6pTlUlIoJodm]m^m9p_m`m{m|m}m~mhm*mimjmkm+mlmmmBmCmDm{lwmanxmymzmAm|lWfXz%pnr~ 2mUmb yezexCyC_k`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3n4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nag9n!n#nbgcgdgegfggghgigjgkglg$nib%nzfAfBfCf

1152  

1153 @property 

1154 def arch(self) -> str: 

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

1156 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a hm*mimjmkm+mlmmmBmCmDm%pUmb yezesCzDacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcWnHcIcsnJctnKcLcMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c-k.k1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdc d abbbN O ; = 6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdSdTd#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dcbdb5d6de f ebfbYbZb^ _ -b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+d,d-d=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_dgbhb`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%n

1157  

1158 @property 

1159 def context(self) -> Context: 

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

1161  

1162 Note 

1163 ---- 

1164 Device must be initialized. 

1165  

1166 """ 

1167 self._check_context_initialized() 2tqxq_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqZlznEoRqeh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qFoInHo#q%q(q*q,q.q:q=q

1168 return self._context 2tqxq_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqZlznEoRqeh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qFoInHo#q%q(q*q,q.q:q=q

1169  

1170 @property 

1171 def memory_resource(self) -> MemoryResource: 

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

1173 cdef int attr, device_id 

1174 if self._memory_resource is None: 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCPCQCbC

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

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

1177 device_id = self._device_id 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1178 with nogil: 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1179 HANDLE_RETURN( 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1180 cydriver.cuDeviceGetAttribute( 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1181 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1182 ) 

1183 ) 

1184 if attr == 1: 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1185 from cuda.core._memory import DeviceMemoryResource 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1186 self._memory_resource = DeviceMemoryResource(self._device_id) 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfASkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kPCQCbC

1187 else: 

1188 from cuda.core._memory._legacy import _SynchronousMemoryResource 

1189 self._memory_resource = _SynchronousMemoryResource(self._device_id) 

1190  

1191 return self._memory_resource 2EmFmlC)n1myzzz^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMlgyKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCPCQCbC

1192  

1193 @memory_resource.setter 

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

1195 from cuda.core._memory import MemoryResource 

1196 assert_type(mr, MemoryResource) 

1197 self._memory_resource = mr 

1198  

1199 @property 

1200 def default_stream(self) -> Stream: 

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

1202  

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

1204 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1205  

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

1207 the legacy stream. 

1208  

1209 """ 

1210 return default_stream() 2drerMnTlUlfrgrhrNnOnPnirQnRnSnTnjrkrUnkHlHJJ3fmH4f5fnHoH[H]H^H_H`HiCjCKo:GqC;G'n$GKJLJYlAGMJDGNJEGOJFGPJGGQJHGRJIGSJTJUJVJWJXJYJZJ0J1J2J3JLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GJrKrtDuDvDwDEmFmsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQByzzzEfVmNlWm3mVl}l~lem~zthaAuh!m#m$mvh%mwhbA'm(meHYmZm)mWlYg7e^g-k.kjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kP Q FlGlHlIlJlKlLlMlNGKz'B(B)B*B+B,B-B.B/B:B;BdAeAfA{HSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCPCQCbC

1211  

1212 def __int__(self) -> int: 

1213 """Return device_id.""" 

1214 return self._device_id 2bHcHdHBGEmFm

1215  

1216 def __repr__(self) -> str: 

1217 return f"<Device {self._device_id} ({self.name})>" 2xz)p_GiCjCKo:GqC;G'n$GWfXz(G)G*G+G,G-G.G/GYlAGLo=G?G@GMo[G-m8GFuGFmBnB!B'GrC{GNo|GrBRm

1218  

1219 def __hash__(self) -> int: 

1220 return hash(self.uuid) 2xzpCSCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbxDACJGyD(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbHmFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmP Q T U SmTmbmcm

1221  

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

1223 if not isinstance(other, Device): 2xzpCV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbQGACRGUG(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbuqoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrP Q T U bmcmNF

1224 return NotImplemented 2xzpCUGuqoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrNF

1225 return self._device_id == other._device_id 2xzV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtb2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I - J ubvb. K / L : M wbxbybzbAbBbQGACRG(ith)i*i+iPluh,m,ivh-i.i/i:iwh;i=iYgunvnCbDbEbFbuqP Q T U bmcm

1226  

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

1228 return Device, (self.device_id,) 2)p_GiCjCKo:GqC;G'n$GWfYlDGEGFGGGHGIGLo=G?G@GMo[G-m8GFumBnB!BrCNoJrKrtDuDvDwDzrAr

1229  

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

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

1232  

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

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

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

1236  

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

1238  

1239 Parameters 

1240 ---------- 

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

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

1243  

1244 Returns 

1245 ------- 

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

1247 Popped context. 

1248  

1249 Examples 

1250 -------- 

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

1252 calling this method, e.g. 

1253  

1254 >>> from cuda.core import Device 

1255 >>> dev0 = Device(0) 

1256 >>> dev0.set_current() 

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

1258  

1259 """ 

1260 cdef ContextHandle h_context 

1261 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1262 cdef Context prev_owned = None 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeOGMkNkOk1uPkPGQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1263  

1264 if ctx is not None: 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeOGMkNkOk1uPkPGQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1265 # TODO: revisit once Context is cythonized 

1266 assert_type(ctx, Context) 2OGPG

1267 if ctx._device_id != self._device_id: 2OGPG

1268 raise RuntimeError( 

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

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

1271 ) 

1272 if self._has_inited and self._context is not None: 2OGPG

1273 prev_owned = self._context 2OGPG

1274 # prev_ctx is the previous context 

1275 curr_ctx = as_cu(ctx._h_context) 2OGPG

1276 prev_ctx = NULL 2OGPG

1277 with nogil: 2OGPG

1278 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2OGPG

1279 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2OGPG

1280 self._has_inited = True 2OGPG

1281 self._context = ctx # Store owning context reference 2OGPG

1282 if prev_ctx != NULL: 2OGPG

1283 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2OGPG

1284 return prev_owned 2OGPG

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

1286 else: 

1287 # use primary ctx 

1288 h_context = get_primary_context(self._device_id) 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1289 if h_context.get() == NULL: 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1290 raise ValueError("Cannot set NULL context as current") 

1291 with nogil: 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1292 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1293 self._has_inited = True 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1294 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2NrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFs)DGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAu:D;DBuCu$f%fDu'f(f)f*f+f,fVnEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`fhC=DV l W m X n Y o Z p 0 q 1 r jbkblbmbnbobpbqbrbsbtbYl2 AGs 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F ) G * k + H , I *p+p,pFu- GFJ ubvb. K / L : M wbxbybzbAbBbGuHuIuJuKuLuMuEmFm?D@DNu[D]D^D_DOo`D{DrBkC|D}D0m~ amaEGmOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2u_k#BnmXlgEhEjEkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVm'iNlrEfq!p#p4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8u5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uOE!m$uPEgnQEREhn%uSEin'uTEprUE(u#m)uVEjnWEXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7e?u%E'E@u)E+EJzfmgm[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdpDCb]GDbqDEb^G?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xsD3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xOC:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyeFNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsF-ytF.y/y:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1295  

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

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

1298  

1299 Note 

1300 ---- 

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

1302  

1303 Parameters 

1304 ---------- 

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

1306 Customizable dataclass for context creation options. 

1307  

1308 Returns 

1309 ------- 

1310 :obj:`~_context.Context` 

1311 Newly created context object. 

1312  

1313 """ 

1314 cdef int i 

1315 cdef object resources 

1316 cdef object res 

1317 cdef SMResource sm_res 

1318 cdef WorkqueueResource wq_res 

1319  

1320 if options is None: 29GKkLkb )n1mMkNkOkPkQkRk`G:H

1321 raise ValueError( 2:H

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

1323 ) 

1324  

1325 options = check_or_create_options(ContextOptions, options, "Context options") 29GKkLkb )n1mMkNkOkPkQkRk`G:H

1326 if options.resources is None: 29GKkLkb )n1mMkNkOkPkQkRk`G:H

1327 raise ValueError( 2:H

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

1329 ) 

1330  

1331 resources = tuple(options.resources) 29GKkLkb )n1mMkNkOkPkQkRk`G

1332 if len(resources) == 0: 29GKkLkb )n1mMkNkOkPkQkRk`G

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

1334  

1335 cdef vector[cydriver.CUdevResource] c_resources 

1336 c_resources.resize(len(resources)) 29GKkLkb )n1mMkNkOkPkQkRk`G

1337  

1338 for i, res in enumerate(resources): 29GKkLkb )n1mMkNkOkPkQkRk`G

1339 if isinstance(res, SMResource): 29GKkLkb )n1mMkNkOkPkQkRk`G

1340 sm_res = <SMResource>res 29GKkLkb )n1mMkNkOkPkQkRk`G

1341 if not sm_res._is_usable: 29GKkLkb )n1mMkNkOkPkQkRk`G

1342 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2`G

1343 c_resources[i] = sm_res._resource 29GKkLkb )n1mMkNkOkPkQkRk

1344 elif isinstance(res, WorkqueueResource): 21m

1345 wq_res = <WorkqueueResource>res 21m

1346 c_resources[i] = wq_res._wq_config_resource 21m

1347 else: 

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

1349  

1350 cdef GreenCtxHandle h_green = create_green_ctx_handle( 29GKkLkb )n1mMkNkOkPkQkRk

1351 c_resources.data(), 

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

1353 <cydriver.CUdevice>(self._device_id), 29GKkLkb )n1mMkNkOkPkQkRk

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

1355 ) 

1356 if h_green.get() == NULL: 29GKkLkb )n1mMkNkOkPkQkRk

1357 HANDLE_RETURN(get_last_error()) 

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

1359  

1360 return Context._from_green_ctx(Context, h_green, self._device_id) 29GKkLkb )n1mMkNkOkPkQkRk

1361  

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

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

1364  

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

1366  

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

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

1369  

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

1371 such that the lifetime is managed. 

1372  

1373 Note 

1374 ---- 

1375 Device must be initialized. 

1376  

1377 Parameters 

1378 ---------- 

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

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

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

1382 Customizable dataclass for stream creation options. 

1383  

1384 Returns 

1385 ------- 

1386 :obj:`~_stream.Stream` 

1387 Newly created stream object. 

1388  

1389 """ 

1390 self._check_context_initialized() 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrcr$F*D%F'F(F)F,D-DMnTlUldm]m^mNnOnPnQnRnSnTnUn*F+F_m`m{m|m}m~mlr}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJF,F-F{lwman.Fxmymzm?BAm|lkHlH;H=HmH?H@H/F:FnHoH[H]H^H_H`HhCWfXz(G)G*G+G,G-G.G/GjHlImI-m8GFuGFmBnB!B'GJrKrtDuDvDwD;F=F?F@F[F]F^F0m~ am_F`F{F|F}F~F2maGbGcGdGeGfGgGUmBCCCDCECFCGCHCICJCKCLCMCNC_k#BnmXlsC$B%B5I6IpH7IqH8I9IrHsH!I#I$ItH%IuHvHwHxHyHzHAHBHCH'IDHEHFHGH(IHHIH)I*I+I,IJH-IKH.I/ILHMH:I;I=INH?IOHPHQHRHSHTHUHVHWH@IXHYHZH0H[I1H2H]I^I_I`I3H{I4H|I}I5H6H~IaJbJ7HcJ8H9H!H#H$H%H'H(H)HdJ*H+H,H-HeJ.H/HfJgJNlVlmCWl(E*E^g-k.k^Gvqwqyq0l~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQqSqGojh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qT U $q'q)q+q-q/q;q?qhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGxGNFyGzGgyKz~EaFbFdFbC

1391 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrcr$F*D%F'F(F)F,D-DMnTlUldm]m^mNnOnPnQnRnSnTnUn*F+F_m`m{m|m}m~mlr}G~GaHgHhHiHhm*mimjmkm+mlmmmBmCmDmbHcHdHHFIFJF,F-F{lwman.Fxmymzm?BAm|lkHlH;H=HmH?H@H/F:FnHoH[H]H^H_H`HhCWfXz(G)G*G+G,G-G.G/GjHlImI-m8GFuGFmBnB!B'GJrKrtDuDvDwD;F=F?F@F[F]F^F0m~ am_F`F{F|F}F~F2maGbGcGdGeGfGgGUmBCCCDCECFCGCHCICJCKCLCMCNC_k#BnmXlsC$B%B5I6IpH7IqH8I9IrHsH!I#I$ItH%IuHvHwHxHyHzHAHBHCH'IDHEHFHGH(IHHIH)I*I+I,IJH-IKH.I/ILHMH:I;I=INH?IOHPHQHRHSHTHUHVHWH@IXHYHZH0H[I1H2H]I^I_I`I3H{I4H|I}I5H6H~IaJbJ7HcJ8H9H!H#H$H%H'H(H)HdJ*H+H,H-HeJ.H/HfJgJNlVlmCWl(E*E^g-k.k^Gvqwqyq0l~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQqSqGojh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qT U $q'q)q+q-q/q;q?qhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGxGNFyGzGgyKz~EaFbFdFbC

1392  

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

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

1395  

1396 Note 

1397 ---- 

1398 Device must be initialized. 

1399  

1400 Parameters 

1401 ---------- 

1402 options : :obj:`EventOptions`, optional 

1403 Customizable dataclass for event creation options. 

1404  

1405 Returns 

1406 ------- 

1407 :obj:`~_event.Event` 

1408 Newly created event object. 

1409  

1410 """ 

1411 self._check_context_initialized() 2(DKfLfMfNfOfPfQfRfSfTfUfVfOF7p+D,D-D8p.DdmjHPFamQFGmbEPoQoRoSoToUoZg0g/k:kLbMbVoWoxnynQlRlSl1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;oAnBnCn=o?o@o'g(g=k?kWbXb[o]oDnEnFnGnHn)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupJnKnLnvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSp

1412 cdef Context ctx = self._context 2(DKfLfMfNfOfPfQfRfSfTfUfVfOF7p+D,D-D8p.DdmjHPFamQFGmbEPoQoRoSoToUoZg0g/k:kLbMbVoWoxnynQlRlSl1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;oAnBnCn=o?o@o'g(g=k?kWbXb[o]oDnEnFnGnHn)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupJnKnLnvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSp

1413 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2(DKfLfMfNfOfPfQfRfSfTfUfVfOF7p+D,D-D8p.DdmjHPFamQFGmbEPoQoRoSoToUoZg0g/k:kLbMbVoWoxnynQlRlSl1g2g3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+o8g9g,o-o? @ PbQb.o/o!g#g$g%g[ ] :o;oAnBnCn=o?o@o'g(g=k?kWbXb[o]oDnEnFnGnHn)g*g+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpop:g;gppqp` { 2b3brpsp=g?g@g[g| } tpupJnKnLnvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSp

1414  

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

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

1417  

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

1419 using the memory resource currently associated with this Device. 

1420  

1421 Note 

1422 ---- 

1423 Device must be initialized. 

1424  

1425 Parameters 

1426 ---------- 

1427 size : int 

1428 Number of bytes to allocate. 

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

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

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

1432 the default stream. 

1433  

1434 Returns 

1435 ------- 

1436 :obj:`~_memory.Buffer` 

1437 Newly created buffer object. 

1438  

1439 """ 

1440 self._check_context_initialized() 2EmFmlC)n1myzzzjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMl

1441 return self.memory_resource.allocate(size, stream=stream) 2EmFmlC)n1myzzzjlklllGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlul`kXg;k{kvlRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlEl|k}k@k~kFlGlHlIlJlKlLlMl

1442  

1443 def sync(self) -> None: 

1444 """Synchronize the device. 

1445  

1446 Note 

1447 ---- 

1448 Device must be initialized. 

1449  

1450 """ 

1451 self._check_context_initialized() 2|H}H~HaIbIcIdIeIfIgIhIiIjIkInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYImBnBZI0I1I2I3I4IJrKrtDuDvDwDEmFm#Bnm$B%BpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/HNlVl}l~lemeHWlYg7eP Q

1452 handle_return(runtime.cudaDeviceSynchronize()) 2|H}H~HaIbIcIdIeIfIgIhIiIjIkInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYImBnBZI0I1I2I3I4IJrKrtDuDvDwDEmFm#Bnm$B%BpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/HNlVl}l~lemeHWlYg7eP Q

1453  

1454 def create_graph_builder(self) -> GraphBuilder: 

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

1456  

1457 Returns 

1458 ------- 

1459 :obj:`~graph.GraphBuilder` 

1460 Newly created graph builder object. 

1461  

1462 """ 

1463 from cuda.core.graph._graph_builder import GraphBuilder 28D9Dompm1l2lRC3lqm!D#D4lrmsm$D5l%D6l'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l*D}G~GaHgHhHiHhmimjmkmlmmmBmCmDmbHcHdHHFIFJF{lwmxmymzm?BAm|lgy

1464  

1465 self._check_context_initialized() 28D9Dompm1l2lRC3lqm!D#D4lrmsm$D5l%D6l'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l*D}G~GaHgHhHiHhmimjmkmlmmmBmCmDmbHcHdHHFIFJF{lwmxmymzm?BAm|lgy

1466 return GraphBuilder._init(self.create_stream()) 28D9Dompm1l2lRC3lqm!D#D4lrmsm$D5l%D6l'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l*D}G~GaHgHhHiHhmimjmkmlmmmBmCmDmbHcHdHHFIFJF{lwmxmymzm?BAm|lgy

1467  

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

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

1470  

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

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

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

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

1475  

1476 Note 

1477 ---- 

1478 Device must be initialized. 

1479  

1480 Parameters 

1481 ---------- 

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

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

1484  

1485 Returns 

1486 ------- 

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

1488 Newly created opaque array. 

1489  

1490 .. versionadded:: 1.1.0 

1491 """ 

1492 from cuda.core.texture._array import _create_opaque_array 2TDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFYDZD1D2D4D5D6D7D=B

1493  

1494 self._check_context_initialized() 2TDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFYDZD1D2D4D5D6D7D=B

1495 return _create_opaque_array(options) 2TDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFbFYDZD1D2D4D5D6D7D=B

1496  

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

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

1499  

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

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

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

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

1504  

1505 Note 

1506 ---- 

1507 Device must be initialized. 

1508  

1509 Parameters 

1510 ---------- 

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

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

1513  

1514 Returns 

1515 ------- 

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

1517 Newly created mipmapped array. 

1518  

1519 .. versionadded:: 1.1.0 

1520 """ 

1521 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2cFZF0F1FdF2F0D3D=B

1522  

1523 self._check_context_initialized() 2cFZF0F1FdF2F0D3D=B

1524 return _create_mipmapped_array(options) 2cFZF0F1FdF2F0D3D=B

1525  

1526 def create_texture_object( 

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

1528 ) -> TextureObject: 

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

1530  

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

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

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

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

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

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

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

1538  

1539 Note 

1540 ---- 

1541 Device must be initialized. 

1542  

1543 Parameters 

1544 ---------- 

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

1546 The memory backing the texture. 

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

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

1549  

1550 Returns 

1551 ------- 

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

1553 Newly created texture object. 

1554  

1555 .. versionadded:: 1.1.0 

1556 """ 

1557 from cuda.core.texture._texture import _create_texture_object 2TDUDVDWDXD2DeA3DfA4D5D6D7D3F=B

1558  

1559 self._check_context_initialized() 2TDUDVDWDXD2DeA3DfA4D5D6D7D3F=B

1560 return _create_texture_object(resource, options) 2TDUDVDWDXD2DeA3DfA4D5D6D7D3F=B

1561  

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

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

1564  

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

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

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

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

1569 current CUDA context, so make this device current with 

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

1571 :meth:`create_event`). 

1572  

1573 Note 

1574 ---- 

1575 Device must be initialized. 

1576  

1577 Parameters 

1578 ---------- 

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

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

1581 ``is_surface_load_store=True``. 

1582  

1583 Returns 

1584 ------- 

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

1586 Newly created surface object. 

1587  

1588 .. versionadded:: 1.1.0 

1589 """ 

1590 from cuda.core.texture._surface import _create_surface_object 2YDZDdA0D1D=B

1591  

1592 self._check_context_initialized() 2YDZDdA0D1D=B

1593 return _create_surface_object(resource) 2YDZDdA0D1D=B

1594  

1595  

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

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

1598 global _is_cuInit 

1599 if _is_cuInit is False: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1600 with _lock, nogil: 

1601 HANDLE_RETURN(cydriver.cuInit(0)) 

1602 _is_cuInit = True 

1603 try: 

1604 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1605 except ImportError: 

1606 pass 

1607 else: 

1608 warn_if_cuda_major_version_mismatch() 

1609 return 0 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1610  

1611  

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

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

1614 cdef cydriver.CUdevice dev 

1615 cdef cydriver.CUcontext ctx 

1616 cdef cydriver.CUresult err 

1617 if device_id is None: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]ufHHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1618 with nogil: 2a ]g4F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]F%pnrEmFmPF^FKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BnmXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXC+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmNlKGbnWmor3mcn4mXmdnenVl}l~lemWz5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDDooDmCYmZm)mWlYg7eHzunvnIz(E*EJzfmgmmrAe'pWnHcRFIcsnJctnKcLGLcMGMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koC

1619 err = cydriver.cuCtxGetDevice(&dev) 2a ]g4F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]F%pnrEmFmPF^FKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BnmXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXC+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmNlKGbnWmor3mcn4mXmdnenVl}l~lemWz5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDDooDmCYmZm)mWlYg7eHzunvnIz(E*EJzfmgmmrAe'pWnHcRFIcsnJctnKcLGLcMGMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koC

1620 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ]g4F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]F%pnrEmFmPF^FKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amQFGmbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BnmXlfEiEsCsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXC+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmNlKGbnWmor3mcn4mXmdnenVl}l~lemWz5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDDooDmCYmZm)mWlYg7eHzunvnIz(E*EJzfmgmmrAe'pWnHcRFIcsnJctnKcLGLcMGMc^gNc~fXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nagRD9n!n#nbgtCcgdguCegvCfgggwCSDhgigjgkglg$nib%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=BSk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koC

1621 return int(dev) 24F8D5F6F7F8F9Dompm1l2lRC3lqm!D#D4lrm.msm$D5l/m%D6l:m'Dtmumvm7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`lLrMr9F@q[q]q^q;m(D!F#FIr=m?m@m[m_q`q{q|q}q~qarbrTpUp6fXf1eKfLfse7fYf2eMfNfte8fZf3eOfPfue9f0f4eQfRfve!f1f5eSfTfwe#f2f6eUfVfxeVpcrWpXpYpZp0p1pdr$F2p3p4p5p*D%F'F(F)F6perOF7p+D,D-D8p.DMnTlUlIoJodm]m^mfrgrhrNnOnPnirQnRnSnTnjrkrUn9p*F+F_m`m{m|m}m~mlrhm*mimjmkm+mlmmmBmCmDmBG,F-F{lwman.Fxmymzm?BAm|l$f%fCG'f(f)f*f+f,fVn-f3fDf.f4f/F/f:F5f:f;f=f?f@f[f]f^f_f`fhCl m n o p q r s t u v w x y z A B C D E F G k H I J K L M ;F=F?F@F[F]FPF^FQFbE_F`F{F|F}F~F2maGbGcGdGeGfGgGUm_k#BXlfEiEsCsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDVmNlKGbnWmor3mcn4mXmdnenVl}l~lem5m(i~zth6m)i7m*i8m+ilBPlaAuh9m,mfnRB!mAzgnBzhnCzinDzprEz#mFzjnGzkn,i$mvhln-imn.inn/ion:i%mwhpn;i=iqnrnbA'm(mnDoDmCYmZm)mWlYgHzunvnIz(E*EJzfmgmmr'pWnHcRFIcsnJctnKcLGLcMGMc^gNcXnYnZn0n1n2n3nAD4n5n6nOcPcQcRcScTcUcVcWcXcYcZc0c^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCd8eDd9eEdFd!eGd#eHdBeCeg c h d LbMb$e%e'e(e)e*e+e4bab5bbbR N S O DeEeNb; Ob= Fe,e-e6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=e?eSd@eTdKeLe#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4d[e]e)bcb*bdbMe5dNe6dOePei e j f WbXb^e_e`e{e|e}e~e+beb,bfb7dYb8dZbQeRe0b^ 1b_ Seafbf-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgfhf,dif-dXeYe=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_djfkf^bgb_bhb`d{dlf|dmf}d~daebeZece0edenfeeoffepfgeqfherfiesfjetfkeuflevfmewfneoexfpeyfqere7n8nRD9n!n#nSD$n%nsDNGhGLFiGjGkGlGMFmGnGoGpGqGrGsGtGuGvGwGOCxGNFyGzGmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCfUgVgWgTDUDVDWDXD}ESFTFUFVFWFXFgyYFKz~EaFYGZG0G1G2G3GbFcFZF0F1FdF4G5G6G7G'B(B)B*B+B,B2F-B.B/B:B;BYDZDdA0D1D2DeA3DfA4D5D6D7D3F=B[B]B^B_B`B{B|B}B~BaCnCoC

1622 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1623 with nogil: 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k

1624 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k

1625 assert <void*>(ctx) == NULL 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k

1626 return 0 # cudart behavior 2a ]g%pnrEmFmKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBkCwn~DcA@B0m~ amGmnm`b{b|b}b~b*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEfWzDo7eAe~fagbgtCcgdguCegvCfgggwChgigjgkglgibSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k

1627 else: 

1628 HANDLE_RETURN(err) 

1629 elif device_id < 0: 2a NrOrPrQrRrSrTrUrVr1lWr2lXrRCYr3lZr0r1r2r4l3r4r5r6r7r5l8r9r!r6l#r$r%r'r(r)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrssstsusvs@qws[qxs]qys^qzsAsBsCsDsBrEsCrFs)DGsHsIsJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtrtFrstttcrutGrvtwtxtytztAtBtdrCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRterStTtUtVtWtXtYtZt0t1t2t3t4t7p5t+D6t7t8t8p9t.D!tMn#tTl$tUl%t't(t)t*t+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$isu%ituuu{lvuwuxuyuzuAu:D;DBu|lCu$f%fDu!G'fxz(fpC)fSC*f+f,fEu-f3fDf.f4f/f5f:f#G;f=f?f@f[f]f^f_f`f=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(nGuHuIuJuKuLuMuEmFm?D@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DrByD|DUG}DaEbEOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2uXlgEhEjEkEacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fyzzz3umEnEoEpEqEEfVG'irEfqWG!pXG#p4usEtEuEvE5u6uwE7uxEyEzE8u9u!uAEBECEDEEEFEGEHEIEJEKELEMENE#uOE$uPEQERE%uSE'uTEUE(u)uVEWEXEYEZE0E*u+u1E,u2E3E4E-u5E6E7E8E9E.u/u!E#E:u;u$p=u$E?u%E'E@u(E)E*E+EJz[ugqhqiqjqkqlqmqnqoqpqqqrqsq]ufHHcRFIc^uJc_uKcLcMc^g`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xOl3x4x5xLF6x7x8x9x!xMF#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x}E~xaybycydyeyfygyhyiyKzjykylymynyoypyqyrysycFtyuyvywyxyyyzyAyBy'BCy(BDy)BEy*BFy+BGy,BHyIy-BJy.BKy/BLy:BMy;BeFNyOydAPyQyRySyeATyUyfAVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

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

1631 return device_id 2a NrOrPrQrRrSrTrUrVr1lWr2lXrRCYr3lZr0r1r2r4l3r4r5r6r7r5l8r9r!r6l#r$r%r'r(r)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrssstsusvs@qws[qxs]qys^qzsAsBsCsDsBrEsCrFs)DGsHsIsJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtrtFrstttcrutGrvtwtxtytztAtBtdrCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRterStTtUtVtWtXtYtZt0t1t2t3t4t7p5t+D6t7t8t8p9t.D!tMn#tTl$tUl%t't(t)t*t+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t|t}t~taubucudueufuguhuiujukulumunuou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$isu%ituuu{lvuwuxuyuzuAu:D;DBu|lCu$f%fDu!G'fxz(fpC)fSC*f+f,fEu-f3fDf.f4f/f5f:f#G;f=f?f@f[f]f^f_f`f=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(nGuHuIuJuKuLuMuEmFm?D@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DrByD|DUG}DaEbEOucEPuQuRuSuTuUuVuWudEeEXuYuZu0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2uXlgEhEjEkEacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fyzzz3umEnEoEpEqEEfVG'irEfqWG!pXG#p4usEtEuEvE5u6uwE7uxEyEzE8u9u!uAEBECEDEEEFEGEHEIEJEKELEMENE#uOE$uPEQERE%uSE'uTEUE(u)uVEWEXEYEZE0E*u+u1E,u2E3E4E-u5E6E7E8E9E.u/u!E#E:u;u$p=u$E?u%E'E@u(E)E*E+EJz[ugqhqiqjqkqlqmqnqoqpqqqrqsq]uHcRFIc^uJc_uKcLcMc^g`uNc{u|u}u~uavbvcv,EdvevfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|w:E}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIx]EJxKxLxMxNxOxPxQxRxSxTx^EUx_EVxWxXx`E{EYxib|EZx0x1x2xOl3x4x5xLF6x7x8x9x!xMF#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x}E~xaybycydyeyfygyhyiyKzjykylymynyoypyqyrysycFtyuyvywyxyyyzyAyBy'BCy(BDy)BEy*BFy+BGy,BHyIy-BJy.BKy/BLy:BMy;BeFNyOydAPyQyRySyeATyUyfAVyWyXyYyZy0y1y2y3y4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+kqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1632  

1633  

1634cdef inline list Device_ensure_tls_devices(cls): 

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

1636 cdef int total 

1637 try: 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1638 return _tls.devices 2a ]g4FNr8DOr5FPr6FQr7FRr8FSr9DTromUrpmVr1lWr2lXrRCYr3lZrqm0r!D1r#D2r4l3rrm4r.m5rsm6r$D7r5l8r/m9r%D!r6l#r:m$r'D%rtm'rum(rvm)r7l*r8l+r9l,r!l-r#l.r$l/r%l:r'l;r(l=r)l?r*l@r+l[r,l]r-l^r.l_r/l`r:l{r;l|r=l}r?l~r@las[lbs]lcs^lds_les`lfsLrgsMrhsgAisjs(phAkslsiAmsjAnskAos1h2h3hps4h5h6hlAqsrsss9Ftsusvs@qws[qxs]qys^qzs;mAs(DBs!FCs#FDsBrEsCrFsIr)D=mGs?mHs@mIs[mJs_qKs`qLs{qMs|qNs}qOs~qPsarQsbrRsDrSsTsUsVsmAWsnAXsoAYspAZsqA0srA1sTp2sUp3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntErotsApttAqtVprtFrstttcrutGrvtWpwtXpxtYpytZpzt0pAt1pBtdrCt$FDtEtFtGtHt2pIt3pJt4pKt5pLt*DMt%FNt'FOt(FPt)FQt6pRterStTtUtVtWtXtYtZt0t1t2t3tOF4t7p5t+D6t,D7t-D8t8p9t.D!tMn#tTl$tUl%tIo'tJo(tdm)t]m*t^m+tfr,tgr-thr.tNn/tOn:tPn;tir=tQn?tRn@tSn[tTn]tjr^tkr_tUn`t{t9p|t*F}t~tau+Fbucudueu_mfu`mgu{mhu|miu}mjukulumunu~mou/DpulrquruQiRiSiTiUiVihmWi*mXiimYijmZikm0i+m1ilm2imm3iBm4iCm5iDm6i7i8i9iHF!iIF#iJF$iBGsu%i,Ftu-Fuu{lvuwmwuanxu.FyuxmzuymAuzm:D?B;DAmBu|lCu$f%fCGDu!G'fxz(fpC)fSC*f+f,fVnEu-f3fDf.f4f/F/f:F5f:f#G;f=f?f@f[f]f^f_f`fhC=D)pV l iCW jCm KoX n qCY o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 DG5 6 EG7 8 FG9 ! GG# $ HG% ' IG( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,pFu- J mBubnBvb!B. K rC/ L No: M JrwbKrxbtDybuDzbvDAbwDBb(n;FGu=FHu?FIu@FJu[FKu]FLuMu%pnrEmFmPF?D^F@DxDNuQG[DAC]DRG^DJG_DOoSG`DTG{DKFuAvAwAxAYzLzZzcCyAzCaldC0zzAAABACAMzNzDAEA1zFAGA2zblOzHAIAJAKA3zPz4zQz5z6z7zLA8z9zRzMASzNAOAeCPAQARASATAUAVAWAXAYAZA0A1Acl!z2A#z$zdl3A%z4A5A6A'z(zel7A8Afl9A)z*z!A[k#Agl+z$A%A'A(A,z-z)A*A+A,A.z]k-A.A^k/AHr:A/z:z;z;A=A?AhlfC@A[A]A^A_A`A{A|A}ATz~A,kaBbBil=z?zgC@z[zcBdB]zeBfBUzgBhBiBVzjBkBrBkCyD|DUG}Dwn~DcA@B0m~ amQFaEGmbEOu_FcE`FPu{FQu|FRu}FSu~FTu2mUuaGVubGWucGdEdGeEeGXufGYugGZuUm0uBCCCDCECFCGCHCICJCKCLCMCNC-pKkLklCb )nye1mzeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdq%Geq2u_k#BnmXlfEgEhEiEjEsCkEsBtB`buB{bvBwB|bxByBzBABBBCBDBEBFB}bGBHBIBJBKBLBMBNBOBPB~bQBzDacbccclEdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}fTC$B%BUCVCWC*nXCyzzz3umEnEoEpEqE+n,nYC-nZC.n0C/n1C:n2C3C;n=n4C5C?n@n[n6C]n7C8C9C^n_n!C`n{n|n#C}n$C~nao%Cbo'Cco(Cdo)Ceo*C+C,Cfogo-C.C/Cho:C;C=C?C@Ciojo[C]C^Ckolo_C`Cmonooopo{C|C}C~CaDbDqocDrosodDtoeDfDuovowogDhDiDxoyojDzoAokDlDBomDCoEfVmVG'iNlrEfqWG!pXG#pKG4usEbnWmortE3muEcnvE4m5uXm6udnwEen7uVlxE}lyE~lzEem8uWz5m9u(i!u~zAEthBE6mCE)iDE7mEE*iFE8mGE+iHElBIEPlJEaAKEuhLE9mME,mNEfn#uRBOE!m$uAzPEgnQEBzREhn%uCzSEin'uDzTEprUEEz(u#m)uFzVEjnWEGzXEknYE,iZE$m0Evh*uln+u-i1Emn,u.i2Enn3E/i4Eon-u:i5E%m6Ewh7Epn8E;i9E=i.uqn/urn!EbA#E'm:u(m;u$pnDDooDmCYmZm)m=uWl$EYg7eHz?uun%Evn'EIz@u(E)E*E+EJzfmgmmr[uAe'pgqhqiqjqkqlqmqnqoqpqqqrqsqWn]uHcRFIcsn^uJctn_uKcLGLcMGMc^g`uNc~fXn{uYn|uZn}u0n~u1nav2nbv3ncvAD,E4ndv5nev6nfvOcPcQcRcScTcUcVcWcXcYcZc0c-kgv.khv^z1c_z2c`z3c{z4c|z5c}z6cfz7cgz8chz9ciz!cjz#ckz$clz%cmz'cnz(coz)cpz*cqz+crz,csz-ctz.cuz/cvz:cwz;c-E=c.E?coB@cSB[cTB]cUB^cVB_cWB`cXB{cpB|cYB}cZB~c0Bad1Bbd2Bcd3BddqBed4Bfd5Bgd6Bhd7Bid8Bjd9Bkd/EldBDmdCDndDDodEDpdFDqdGDrdHDsdIDtdJDudKDvdLDwdMDxdNDydODzdPDAdQDBdCdpDCbDbqDEb?irDFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w7n{w8n|wagRD:E9n}w~w;E=Eaxbx?Ecxdxex@Efxgxhxixjxkxlxmxnx[EoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxEx!nFx#nGxbgtCcgdgHxIx]EJxKxLxMxNxOxPxQxRxSxTxuCegvCfgggwCSD^Ehgigjgkglg$nUx_EVxWxXx`E{EYxib|EZx%n0x1x2xOlsD3xNG4xhG5xLF6xiG7xjG8xkG9xlG!xMF#xmG$xnG%xoG'xpG(xqG)xrG*xsG+xtG,xuG-xvG.xwG/xOC:xxG;xNF=xyG?xzG@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWgTD_xUD`xVD{xWD|xXD}x}E~xSFayTFbyUFcyVFdyWFeyXFfygyhyYFiyKzjy~EkyaFlyYGmyZGny0Goy1Gpy2Gqy3GrybFsycFtyZFuy0Fvy1FwydFxy4Gyy5Gzy6GAy7GBy'BCy(BDy)BEy*BFy+BGy,BHy2FIy-BJy.BKy/BLy:BMy;BeFYDNyZDOydAPy0DQy1DRy2DSyeATy3DUyfAVy4DWy5DXyYyZy6D0y1y7D2y3F3y=B4yfFgF5yhF6y7y8y9yiFjF!ykF#y$y%y'y(ylFmF)ynFoFpF*y+y,ySk[BTk]BUkVkWkXk^BYkZk_B0k`B1k2k3k4k5k6k{B|B7k}B8k9k~B!kaC#k$k%k'k(k)knC*k+koCqFrFsFPC-ytFQC.y/ybC:y;y=yuFvFwF?y@y[yxFyF]y^y_yzF`yAFBF{y|y}y~yCFDFEFazbzczdzFFez

1639 except AttributeError: 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1640 with nogil: 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1641 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1642 devices = _tls.devices = [] 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1643 for dev_id in range(total): 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1644 device = super(Device, cls).__new__(cls) 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1645 device._device_id = dev_id 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1646 device._memory_resource = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1647 device._has_inited = False 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1648 device._properties = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1649 device._resources = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1650 device._uuid = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1651 device._context = None 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1652 devices.append(device) 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez

1653 return devices 2a ]gNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjs(pkslsmsnsos1h2h3hps4h5h6hqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s6fXf1e7hKfLf8h4s5s6s7sse9h!h#h$h%h8s9s7fYf2e'hMfNf(h!s#s$s%ste)h*h+h,h-h's(s.h/h:h)s;h=h?h@h[h]h^h_h`h8fZf3e{hOfPf|h*s+s,s-sue}h~haibici.s/s9f0f4ediQfRfei:s;s=s?svefigihiiiji@s[s!f1f5ekiSfTfli]s^s_s`sweminioipiqi{s|s#f2f6eriUfVfsi}s~satbtxetiuiviwixictdtyiziAiBiCiDiEiFiGiHiIiJietKiLiMiNiOiPiftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuquruQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$isu%ituuuvuwuxuyuzuAuBuCu$f%fDu'f(f)f*f+f,fEu-f3fDf.f4f/f5f:f;f=f?f@f[f]f^f_f`f)pV l W m KoX n Y o 'nZ p 0 q Wf1 r jbkblbmbnbobpbqbrbsbtbYl2 s 3 t 4 5 6 7 8 9 ! # $ % ' ( u v w x y z A B C D E F Lo) G * k Mo+ H -m, I *p+p,p- J ubvb. K / L No: M JrwbKrxbybzbAbBb(nGuHuIuJuKuLuMuNuOoalblcldlelfl[kgl]k^khl,kilwn0m~ amGmOuPuQuRuSuTuUuVuWuXuYuZu0u-pKkLkb yezeMkNkOk1uPkQkRk.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeq2unm`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGc{f|f}f*n3u+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoEf'ifq4u5u6u7u8uWz9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;uDo=u7e?u@u[uAegqhqiqjqkqlqmqnqoqpqqqrqsq]uHcIc^uJc_uKcLcMc`uNc~f{u|u}u~uavbvcvdvevfvOcPcQcRcScTcUcVcWcXcYcZc0cgvhv1c2c3c4c5c6c7c8c9c!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~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdCbDbEb?iFb@ijl8eivtquq[iPoQoRo]ijvkvlvmvDd9e^i_iEdnvvqovpvklFdwq`ill!eqvxqHm{iSoToUo|irvsvtvuvGd#e}i~iHdvvyqwvxvBeZg0gxhajbjcjCeyhzhdjejGbg mlHb/k:kIbnlolplqlc h rlJbKbd sltlulLbMb$e%e'e(e)efj*egjVoWohjyvzvAv+eijjjBvCvDv_g`k4bzq`gxnyn{gAqBqCqDqab5bEq|g}gbbFqGqHqFfXgR ImZlGfQlRlSlHfJmKmLmMmN S NmIfJfO Om0lPmQmAhDe1g2gBhkjljmjEeChDhnjoj3g;kNbXozn4gYoZo5g0o1o2o3o; Ob4o6g7g= 5o6o7o8o9o!o#o$o%o'o(o)o*o+oFe8g9gpjqjrjEhFhsjtjuj,eEvvj,o-owjFvGvHv-exjyjIvJvKvLvMvNvOvPvQvRvSvTv6bIdJd7b? @ 8bKdLdMdNdOd9b!bPdQdRdGePbQbHe.e/e:eIeJe;e=ezj?eUvAj.o/oBjVvWvXvYvSd@eCjDjTdZv0v1vKe!g#gEjFjGjHjIjLe$g%gJjKjLjGhMjNj#bUdVd$b[ ] %bWdXdYdZd0d1d'b(b2d3d4dOj[ePj:o;oQj2v3v4v]eRjSj5v6v~g{k)bIqEoahAnBnCnbhJqKqLqMqcb*bNqchdhdbOqPqQq7vHhvlMe8vRq9vIh=o?o@oJh!v#v$v%v5dNeKhLh6d'vSq(v)vOe'g(gMhTjUjVjPeNhOhWjXjRbi wlSb=k?kTbxlylzlAle j BlUbVbf ClDlElWbXb^e_e`e{e|eYj}eZj[o]o0j*v+v,v~e1j2j-v.v/veh|k+bTqfhDnEnghUqVqWqXqeb,bYqhhihfbZq0q1qoh}k7dqrFophFnGnHnqhrrsrtrurYb8dvrrhshZbwrGoxryrPhQe)g*gQh3j4j5jReRhSh6j7j+g@k0b^oIn,g_o`o-g{o|o}o~o^ 1bap.g/g_ bpcpdpepfpgphpipjpkplpmpnpopSe:g;g8j9j!jThUh#j$j%jaf:v'jppqp(j;v=v?vbf)j*j@v[v]v^v_v`v{v|v}v~vawbw-b9d!d.b` { /b#d$d%d'd(d:b;b)d*d+dTe2b3bUecfdfefVeWeffgf+jhfcw,jrpsp-jdwewfwgw,dif.j/j-dhwiwjwXe=g?g:j;j=j?j@jYe@g[g[j]j^jVh_j`j=b.d/d?b| } @b:d;d=d?d@d[d[b]b]d^d_d{jjf|jtpup}jkwlwmwkf~jaknwowjh~k^b2qHokhJnKnLnlh3q4q5q6qgb_b7qmhnhhb8q9q!qpwzrArP Q T U `d{dbkFllfqw#qRmckvpwpxpdkrwswtwuw|dmfekfk}d~dvwaebewwxw$qywzwWhGlZeAw%qBwXhypzpApYhCwDwEwFwce0eZh0hdeGw'qHwIwgkHlnfJw(qSmhkBpCpDpikKwLwMwNweeofjkkkfeOw)qPwQwlkIlpfRw*qTmmkEpFpGpnkSwTwUwVwgeqfokpkheWw+qXwYwqkJlrfZw,qbmrkHpIpJpsk0w1w2w3wiesftkukje4w-q5w6wvkKltf7w.qcmwkKpLpMpxk8w9w!w#wkeufykzkle$w/q%w'wAkLlvf(w:q)wBkNpOpPpCk*w+w,w-wmewfDkEkneoe.w;q/w:wFkMlxf;w=q=wGkQpRpSpHk?w@w[w]wpeyfIkJkqere^w?q_w`w{w|wag}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxbgcgdgHxIxJxKxLxMxNxOxPxQxRxSxTxegfggghgigjgkglgUxVxWxXxYxibZx0x1x2xOl3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@xmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgzfAfBfCf[x]x^xUgVgWg_x`x{x|x}x~xaybycydyeyfyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,ySkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzez