Coverage for cuda/core/_device.pyx: 83.61%
488 statements
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-05 01:11 +0000
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-05 01:11 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context, Context_check_open
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._rt cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 context_synchronize,
27 get_primary_context,
28 get_last_error,
29 as_cu,
30)
32from cuda.core._stream import IsStreamType, Stream, StreamOptions
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport (
41 default_stream,
42)
44from typing import TYPE_CHECKING
46if TYPE_CHECKING:
47 import cuda.core.system # no-cython-lint
48 from cuda.core.graph import GraphBuilder
49 from cuda.core.texture import (
50 MipmappedArray,
51 MipmappedArrayOptions,
52 OpaqueArray,
53 OpaqueArrayOptions,
54 ResourceDescriptor,
55 SurfaceObject,
56 TextureObject,
57 TextureObjectOptions,
58 )
60# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
61# but it seems it is very convenient to expose them for testing purposes...
62_tls = threading.local()
63_lock = threading.Lock()
64cdef bint _is_cuInit = False
66__all__ = ['Device']
69cdef class DeviceProperties:
70 """
71 A class to query various attributes of a CUDA device.
73 Attributes are read-only and provide information about the device.
74 """
75 cdef:
76 int _handle
77 dict _cache
79 def __init__(self, *args, **kwargs) -> None:
80 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2,Q
82 @classmethod
83 def _init(cls, handle: int) -> DeviceProperties:
84 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
85 self._handle = handle 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
86 self._cache = {} 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
87 return self 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
89 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
90 """Retrieve the attribute value directly from the driver."""
91 cdef int val
92 cdef cydriver.CUresult err
93 with nogil: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
94 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
95 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
96 return <int>default
97 HANDLE_RETURN(err) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
98 return val 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
100 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
101 """Retrieve the attribute value, using cache if applicable."""
102 cached = self._cache.get(attr) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
103 if cached is not None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
104 return cached 2`d{d|d}d~daeBlEljkgeheiejebe;G^dkeceledemeeeneoepeqereseteOIL M N O xMP Q R S T d U V W X Y Z 0 1 2 3 4 5 6 7 8 tF9 uF! vF# $ % @H[H' {G( ) YK#M$M%M:M;MZKeK0K1K=M'M?M(M)M@M*M2KlF+M~MaNbNcN=GnIoIpIqI#J$Je bjmknk8kZl9kdjokpkqkejfjgj3ErkUiAo=jEpFpGptk;e?jukvk@jViWiXi=e?eYiwkxkykzkAkBkCkDkMkfe[jNkZiljEkFk.G/G:Gdgegfggghga igjgkglgmg
105 cdef int value = self._get_attribute(attr, default) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
106 self._cache[attr] = value # setdefault not needed for ints 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
107 return value 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
109 @property
110 def max_threads_per_block(self) -> int:
111 """int: Maximum number of threads per block."""
112 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2-iXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E.G|G}G~GaHbHcH/GdHeHfHgHhHiH:GjHkHlHmHnHoH
114 @property
115 def max_block_dim_x(self) -> int:
116 """int: Maximum block dimension X."""
117 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2jG
119 @property
120 def max_block_dim_y(self) -> int:
121 """int: Maximum block dimension Y."""
122 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2kG
124 @property
125 def max_block_dim_z(self) -> int:
126 """int: Maximum block dimension Z."""
127 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2lG
129 @property
130 def max_grid_dim_x(self) -> int:
131 """int: Maximum grid dimension X."""
132 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2nGe
134 @property
135 def max_grid_dim_y(self) -> int:
136 """int: Maximum grid dimension Y."""
137 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2oG
139 @property
140 def max_grid_dim_z(self) -> int:
141 """int: Maximum grid dimension Z."""
142 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2pG
144 @property
145 def max_shared_memory_per_block(self) -> int:
146 """int: Maximum shared memory available per block in bytes."""
147 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2sGXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E.G|G}G~GaHbHcH/GdHeHfHgHhHiH:GjHkHlHmHnHoH
149 @property
150 def total_constant_memory(self) -> int:
151 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
152 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2WG
154 @property
155 def warp_size(self) -> int:
156 """int: Warp size in threads."""
157 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2aj
159 @property
160 def max_pitch(self) -> int:
161 """int: Maximum pitch in bytes allowed by memory copies."""
162 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2rG
164 @property
165 def maximum_texture1d_width(self) -> int:
166 """int: Maximum 1D texture width."""
167 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2=i
169 @property
170 def maximum_texture1d_linear_width(self) -> int:
171 """int: Maximum width for a 1D texture bound to linear memory."""
172 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2AG
174 @property
175 def maximum_texture1d_mipmapped_width(self) -> int:
176 """int: Maximum mipmapped 1D texture width."""
177 return self._get_cached_attribute( 2MF
178 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2MF
179 )
181 @property
182 def maximum_texture2d_width(self) -> int:
183 """int: Maximum 2D texture width."""
184 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2[i
186 @property
187 def maximum_texture2d_height(self) -> int:
188 """int: Maximum 2D texture height."""
189 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2CG
191 @property
192 def maximum_texture2d_linear_width(self) -> int:
193 """int: Maximum width for a 2D texture bound to linear memory."""
194 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2@i
196 @property
197 def maximum_texture2d_linear_height(self) -> int:
198 """int: Maximum height for a 2D texture bound to linear memory."""
199 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2EG
201 @property
202 def maximum_texture2d_linear_pitch(self) -> int:
203 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
204 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2FG
206 @property
207 def maximum_texture2d_mipmapped_width(self) -> int:
208 """int: Maximum mipmapped 2D texture width."""
209 return self._get_cached_attribute( 2QF
210 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2QF
211 )
213 @property
214 def maximum_texture2d_mipmapped_height(self) -> int:
215 """int: Maximum mipmapped 2D texture height."""
216 return self._get_cached_attribute( 2PF
217 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2PF
218 )
220 @property
221 def maximum_texture3d_width(self) -> int:
222 """int: Maximum 3D texture width."""
223 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2IG
225 @property
226 def maximum_texture3d_height(self) -> int:
227 """int: Maximum 3D texture height."""
228 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2HG
230 @property
231 def maximum_texture3d_depth(self) -> int:
232 """int: Maximum 3D texture depth."""
233 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2GG
235 @property
236 def maximum_texture3d_width_alternate(self) -> int:
237 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
238 return self._get_cached_attribute( 27i
239 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 27i
240 )
242 @property
243 def maximum_texture3d_height_alternate(self) -> int:
244 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
245 return self._get_cached_attribute( 2SF
246 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2SF
247 )
249 @property
250 def maximum_texture3d_depth_alternate(self) -> int:
251 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
252 return self._get_cached_attribute( 2RF
253 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2RF
254 )
256 @property
257 def maximum_texturecubemap_width(self) -> int:
258 """int: Maximum cubemap texture width or height."""
259 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2]i
261 @property
262 def maximum_texture1d_layered_width(self) -> int:
263 """int: Maximum 1D layered texture width."""
264 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2zG
266 @property
267 def maximum_texture1d_layered_layers(self) -> int:
268 """int: Maximum layers in a 1D layered texture."""
269 return self._get_cached_attribute( 2LF
270 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2LF
271 )
273 @property
274 def maximum_texture2d_layered_width(self) -> int:
275 """int: Maximum 2D layered texture width."""
276 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2DG
278 @property
279 def maximum_texture2d_layered_height(self) -> int:
280 """int: Maximum 2D layered texture height."""
281 return self._get_cached_attribute( 2NF
282 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2NF
283 )
285 @property
286 def maximum_texture2d_layered_layers(self) -> int:
287 """int: Maximum layers in a 2D layered texture."""
288 return self._get_cached_attribute( 2OF
289 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2OF
290 )
292 @property
293 def maximum_texturecubemap_layered_width(self) -> int:
294 """int: Maximum cubemap layered texture width or height."""
295 return self._get_cached_attribute( 2UF
296 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2UF
297 )
299 @property
300 def maximum_texturecubemap_layered_layers(self) -> int:
301 """int: Maximum layers in a cubemap layered texture."""
302 return self._get_cached_attribute( 2TF
303 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2TF
304 )
306 @property
307 def maximum_surface1d_width(self) -> int:
308 """int: Maximum 1D surface width."""
309 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2.i
311 @property
312 def maximum_surface2d_width(self) -> int:
313 """int: Maximum 2D surface width."""
314 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2/i
316 @property
317 def maximum_surface2d_height(self) -> int:
318 """int: Maximum 2D surface height."""
319 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2vG
321 @property
322 def maximum_surface3d_width(self) -> int:
323 """int: Maximum 3D surface width."""
324 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2xG
326 @property
327 def maximum_surface3d_height(self) -> int:
328 """int: Maximum 3D surface height."""
329 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2;i
331 @property
332 def maximum_surface3d_depth(self) -> int:
333 """int: Maximum 3D surface depth."""
334 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2:i
336 @property
337 def maximum_surface1d_layered_width(self) -> int:
338 """int: Maximum 1D layered surface width."""
339 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2uG
341 @property
342 def maximum_surface1d_layered_layers(self) -> int:
343 """int: Maximum layers in a 1D layered surface."""
344 return self._get_cached_attribute( 2HF
345 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2HF
346 )
348 @property
349 def maximum_surface2d_layered_width(self) -> int:
350 """int: Maximum 2D layered surface width."""
351 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2wG
353 @property
354 def maximum_surface2d_layered_height(self) -> int:
355 """int: Maximum 2D layered surface height."""
356 return self._get_cached_attribute( 2IF
357 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2IF
358 )
360 @property
361 def maximum_surface2d_layered_layers(self) -> int:
362 """int: Maximum layers in a 2D layered surface."""
363 return self._get_cached_attribute( 2JF
364 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2JF
365 )
367 @property
368 def maximum_surfacecubemap_width(self) -> int:
369 """int: Maximum cubemap surface width."""
370 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2yG
372 @property
373 def maximum_surfacecubemap_layered_width(self) -> int:
374 """int: Maximum cubemap layered surface width."""
375 return self._get_cached_attribute( 2KF
376 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2KF
377 )
379 @property
380 def maximum_surfacecubemap_layered_layers(self) -> int:
381 """int: Maximum layers in a cubemap layered surface."""
382 return self._get_cached_attribute( 26i
383 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 26i
384 )
386 @property
387 def max_registers_per_block(self) -> int:
388 """int: Maximum number of 32-bit registers available to a thread block."""
389 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2,i
391 @property
392 def clock_rate(self) -> int:
393 """int: Typical clock frequency in kilohertz."""
394 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2BeBoDH]HsF6k-G
396 @property
397 def texture_alignment(self) -> int:
398 """int: Alignment requirement for textures."""
399 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2}i
401 @property
402 def texture_pitch_alignment(self) -> int:
403 """int: Pitch alignment requirement for textures."""
404 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2~i
406 @property
407 def gpu_overlap(self) -> bool:
408 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
409 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2aG
411 @property
412 def multiprocessor_count(self) -> int:
413 """int: Number of multiprocessors on device."""
414 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2QGe
416 @property
417 def kernel_exec_timeout(self) -> bool:
418 """bool: Specifies whether there is a run time limit on kernels."""
419 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2_H
421 @property
422 def integrated(self) -> bool:
423 """bool: Device is integrated with host memory."""
424 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2fG
426 @property
427 def can_map_host_memory(self) -> bool:
428 """bool: Device can map host memory into CUDA address space."""
429 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2@F
431 @property
432 def compute_mode(self) -> int:
433 """int: Compute mode (See CUcomputemode for details)."""
434 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2^H
436 @property
437 def concurrent_kernels(self) -> bool:
438 """bool: Device can possibly execute multiple kernels concurrently."""
439 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2^F
441 @property
442 def ecc_enabled(self) -> bool:
443 """bool: Device has ECC support enabled."""
444 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2{F
446 @property
447 def pci_bus_id(self) -> int:
448 """int: PCI bus ID of the device."""
449 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2{i
451 @property
452 def pci_device_id(self) -> int:
453 """int: PCI device ID of the device."""
454 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2TG
456 @property
457 def pci_domain_id(self) -> int:
458 """int: PCI domain ID of the device."""
459 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2|i
461 @property
462 def tcc_driver(self) -> bool:
463 """bool: Device is using TCC driver model."""
464 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2VG
466 @property
467 def memory_clock_rate(self) -> int:
468 """int: Peak memory clock frequency in kilohertz."""
469 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2`H
471 @property
472 def global_memory_bus_width(self) -> int:
473 """int: Global memory bus width in bits."""
474 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2}F
476 @property
477 def l2_cache_size(self) -> int:
478 """int: Size of L2 cache in bytes."""
479 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2+i
481 @property
482 def max_threads_per_multiprocessor(self) -> int:
483 """int: Maximum resident threads per multiprocessor."""
484 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2tGXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E
486 @property
487 def unified_addressing(self) -> bool:
488 """bool: Device shares a unified address space with the host."""
489 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2Xbb XG
491 @property
492 def compute_capability_major(self) -> int:
493 """int: Major compute capability version number."""
494 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%f'isF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd
496 @property
497 def compute_capability_minor(self) -> int:
498 """int: Minor compute capability version number."""
499 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%f]FsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd
501 @property
502 def global_l1_cache_supported(self) -> bool:
503 """bool: Device supports caching globals in L1."""
504 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2|F
506 @property
507 def local_l1_cache_supported(self) -> bool:
508 """bool: Device supports caching locals in L1."""
509 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2gG
511 @property
512 def max_shared_memory_per_multiprocessor(self) -> int:
513 """int: Maximum shared memory available per multiprocessor in bytes."""
514 return self._get_cached_attribute( 2GFXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E
515 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2GFXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E
516 )
518 @property
519 def max_registers_per_multiprocessor(self) -> int:
520 """int: Maximum number of 32-bit registers available per multiprocessor."""
521 return self._get_cached_attribute( 25i4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E
522 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 25i4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E
523 )
525 @property
526 def managed_memory(self) -> bool:
527 """bool: Device can allocate managed memory on this system."""
528 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2geheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresetehGlk
530 @property
531 def multi_gpu_board(self) -> bool:
532 """bool: Device is on a multi-GPU board."""
533 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2OG
535 @property
536 def multi_gpu_board_group_id(self) -> int:
537 """int: Unique id for a group of devices on the same multi-GPU board."""
538 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2PG
540 @property
541 def host_native_atomic_supported(self) -> bool:
542 """bool: Link between the device and the host supports all native atomic operations."""
543 return bool( 2CF
544 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2CF
545 )
547 @property
548 def single_to_double_precision_perf_ratio(self) -> int:
549 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
550 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2kk
552 @property
553 def pageable_memory_access(self) -> bool:
554 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
555 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2SG
557 @property
558 def concurrent_managed_access(self) -> bool:
559 """bool: Device can coherently access managed memory concurrently with the CPU."""
560 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2`d{d|d}d~daeCmYl:E;E=E?E@E[EgeheIeJeKeLeMeNeiejebe;G^dkeceOeledemeeePeQeReneoepeqeresete(i-G,e-e.eWKCH!J_l8kZl0l9k`l{lhjtj|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~Ejm9llmujvjwjnmompm+j,j-j
562 @property
563 def compute_preemption_supported(self) -> bool:
564 """bool: Device supports compute preemption."""
565 return bool( 2yF
566 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2yF
567 )
569 @property
570 def can_use_host_pointer_for_registered_mem(self) -> bool:
571 """bool: Device can access host registered memory at the same virtual address as the CPU."""
572 return bool( 2dF
573 self._get_cached_attribute( 2dF
574 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2dF
575 )
576 )
578 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
580 @property
581 def cooperative_launch(self) -> bool:
582 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
583 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2_Fe
585 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
587 @property
588 def max_shared_memory_per_block_optin(self) -> int:
589 """int: Maximum optin shared memory per block."""
590 return self._get_cached_attribute( 2FF
591 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2FF
592 )
594 @property
595 def pageable_memory_access_uses_host_page_tables(self) -> bool:
596 """bool: Device accesses pageable memory via the host's page tables."""
597 return bool( 2kF
598 self._get_cached_attribute( 2kF
599 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2kF
600 )
601 )
603 @property
604 def direct_managed_mem_access_from_host(self) -> bool:
605 """bool: The host can directly access managed memory on the device without migration."""
606 return bool( 2eF
607 self._get_cached_attribute( 2eF
608 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2eF
609 )
610 )
612 @property
613 def virtual_memory_management_supported(self) -> bool:
614 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
615 return bool( 2BlElOIL M N O xMP Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % @H[H' ( ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+enIoIpIqI#J$JTibjmknkEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBkDkMkfe[jNk(k)k*kZiljEkFk
616 self._get_cached_attribute( 2BlElOIL M N O xMP Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % @H[H' ( ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+enIoIpIqI#J$JTibjmknkEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBkDkMkfe[jNk(k)k*kZiljEkFk
617 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2BlElOIL M N O xMP Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % @H[H' ( ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+enIoIpIqI#J$JTibjmknkEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBkDkMkfe[jNk(k)k*kZiljEkFk
618 )
619 )
621 @property
622 def handle_type_posix_file_descriptor_supported(self) -> bool:
623 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
624 return bool( 2, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEb@HFb[HGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbRiTbUbVbWbf g * +
625 self._get_cached_attribute( 2, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEb@HFb[HGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbRiTbUbVbWbf g * +
626 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEb@HFb[HGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbRiTbUbVbWbf g * +
627 )
628 )
630 @property
631 def handle_type_win32_handle_supported(self) -> bool:
632 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
633 return bool( 2AF
634 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2AF
635 )
637 @property
638 def handle_type_win32_kmt_handle_supported(self) -> bool:
639 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
640 return bool( 2gF
641 self._get_cached_attribute( 2gF
642 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2gF
643 )
644 )
646 @property
647 def max_blocks_per_multiprocessor(self) -> int:
648 """int: Maximum number of blocks per multiprocessor."""
649 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2mG
651 @property
652 def generic_compression_supported(self) -> bool:
653 """bool: Device supports compression of memory."""
654 return bool( 22i
655 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 22i
656 )
658 @property
659 def max_persisting_l2_cache_size(self) -> int:
660 """int: Maximum L2 persisting lines capacity setting in bytes."""
661 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2qG
663 @property
664 def max_access_policy_window_size(self) -> int:
665 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
666 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2iG
668 @property
669 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
670 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
671 return bool( 2fF
672 self._get_cached_attribute( 2fF
673 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2fF
674 )
675 )
677 @property
678 def reserved_shared_memory_per_block(self) -> int:
679 """int: Shared memory reserved by CUDA driver per block in bytes."""
680 return self._get_cached_attribute( 2VF
681 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2VF
682 )
684 @property
685 def sparse_cuda_array_supported(self) -> bool:
686 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
687 return bool( 2WF
688 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2WF
689 )
691 @property
692 def read_only_host_register_supported(self) -> bool:
693 """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."""
694 return bool( 28i
695 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 28i
696 )
698 @property
699 def memory_pools_supported(self) -> bool:
700 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
701 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2XpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%n'n(n)n*n+n,n-n.n)F*F+F,F-F.FCe`dtg+d,dugBdvgwgxgygzgDe{dAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dTg/d:dUgDdVgWgXgYgZgFe}d0g;d=d1gEd2g3g4g5g6gGe~d7g?d@d8gFd9g!g#g$g%gHeae'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbh/F:F]nwpxpmnnnCmDmonpn/lqjrjypzpAp:l;l=lBp?l@l[l]lCpDp^lfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhqH5kYl7J`G8J9J, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbLGJhKhLh,e-e.eMhcF?I7kNhcjOhPhQhRhzoShWKCH!J_l8kZl0l9k`l{lhjsjtj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~E5hjm$k9l!llmijjjkjujvjwj6h#l$l%lnmompmAj+jBjCj,j-j7h@I3E8hTbUbVb9hWb!h#h$h%h'h(h)h*h+h,hdgegfggghga f g * + -h.h/h:h;higjgkglgmg=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiriDj
703 @property
704 def gpu_direct_rdma_supported(self) -> bool:
705 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
706 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2~F@j%k[j
708 @property
709 def gpu_direct_rdma_flush_writes_options(self) -> int:
710 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
711 return self._get_cached_attribute( 23i
712 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 23i
713 )
715 @property
716 def gpu_direct_rdma_writes_ordering(self) -> int:
717 """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."""
718 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2)i
720 @property
721 def mempool_supported_handle_types(self) -> int:
722 """int: Handle types supported with mempool based IPC."""
723 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2MG
725 @property
726 def deferred_mapping_cuda_array_supported(self) -> bool:
727 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
728 return bool( 2Qi
729 self._get_cached_attribute( 2Qi
730 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2Qi
731 )
732 )
734 @property
735 def numa_config(self) -> int:
736 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
737 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2`i
739 @property
740 def numa_id(self) -> int:
741 """int: NUMA node ID of the GPU memory."""
742 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2RG
744 @property
745 def multicast_supported(self) -> bool:
746 """bool: Device supports switch multicast and reduction operations."""
747 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2_i
749 @property
750 def surface_alignment(self) -> int:
751 """int: Surface alignment requirement in bytes."""
752 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2UG
754 @property
755 def async_engine_count(self) -> int:
756 """int: Number of asynchronous engines."""
757 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2#i
759 @property
760 def can_tex2d_gather(self) -> bool:
761 """bool: True if device supports 2D texture gather operations, False if not."""
762 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2[F
764 @property
765 def maximum_texture2d_gather_width(self) -> int:
766 """int: Maximum 2D texture gather width."""
767 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2BG
769 @property
770 def maximum_texture2d_gather_height(self) -> int:
771 """int: Maximum 2D texture gather height."""
772 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2?i
774 @property
775 def stream_priorities_supported(self) -> bool:
776 """bool: True if device supports stream priorities, False if not."""
777 return bool( 29i
778 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 29i
779 )
781 @property
782 def can_flush_remote_writes(self) -> bool:
783 """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."""
784 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2$i
786 @property
787 def host_register_supported(self) -> bool:
788 """bool: Device supports host memory registration via cudaHostRegister."""
789 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2eG
791 @property
792 def timeline_semaphore_interop_supported(self) -> bool:
793 """bool: External timeline semaphore interop is supported on the device."""
794 return bool( 2Si
795 self._get_cached_attribute( 2Si
796 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Si
797 )
798 )
800 @property
801 def cluster_launch(self) -> bool:
802 """bool: Indicates device supports cluster launch."""
803 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2%i
805 @property
806 def can_use_64_bit_stream_mem_ops(self) -> bool:
807 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
808 return bool( 2wF
809 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2wF
810 )
812 @property
813 def can_use_stream_wait_value_nor(self) -> bool:
814 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
815 return bool( 2xF
816 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2xF
817 )
819 @property
820 def dma_buf_supported(self) -> bool:
821 """bool: Device supports buffer sharing with dma_buf mechanism."""
822 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Zp
824 # Start of CUDA 12 device attributes
826 @property
827 def ipc_event_supported(self) -> bool:
828 """bool: Device supports IPC Events."""
829 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2*i
831 @property
832 def mem_sync_domain_count(self) -> int:
833 """int: Number of memory domains the device supports."""
834 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2KG
836 @property
837 def tensor_map_access_supported(self) -> bool:
838 """bool: Device supports accessing memory using Tensor Map."""
839 return bool( 2!ikflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f
840 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2!ikflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f
841 )
843 @property
844 def handle_type_fabric_supported(self) -> bool:
845 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
846 return bool( 2zF
847 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2zF
848 )
850 @property
851 def unified_function_pointers(self) -> bool:
852 """bool: Device supports unified function pointers."""
853 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2YG
855 @property
856 def mps_enabled(self) -> bool:
857 """bool: Indicates if contexts created on this device will be shared via MPS."""
858 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2NG
860 @property
861 def host_numa_id(self) -> int:
862 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
863 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2:E;E?E@Eh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K dG9kZh/e0h1h2h3h:e4hag=jskCk
865 @property
866 def d3d12_cig_supported(self) -> bool:
867 """bool: Device supports CIG with D3D12."""
868 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2`F
870 @property
871 def mem_decompress_algorithm_mask(self) -> int:
872 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
873 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2^i
875 @property
876 def mem_decompress_maximum_length(self) -> int:
877 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
878 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2JG
880 @property
881 def vulkan_cig_supported(self) -> bool:
882 """bool: Device supports CIG with Vulkan."""
883 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2ZG
885 @property
886 def gpu_pci_device_id(self) -> int:
887 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
889 Returns 0 if the driver does not support this query.
890 """
891 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2bG
893 @property
894 def gpu_pci_subsystem_id(self) -> int:
895 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
897 Returns 0 if the driver does not support this query.
898 """
899 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2cG
901 @property
902 def host_numa_virtual_memory_management_supported(self) -> bool:
903 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
904 return bool( 2hFCk
905 self._get_cached_attribute( 2hFCk
906 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2hFCk
907 )
908 )
910 @property
911 def host_numa_memory_pools_supported(self) -> bool:
912 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
913 return bool( 2;F=FBo3p4prHsHtHuHvHwHtFuFvF?F5pxH{GyHDF/e:eag
914 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2;F=FBo3p4prHsHtHuHvHwHtFuFvF?F5pxH{GyHDF/e:eag
915 )
917 # Start of CUDA 13 device attributes
919 @property
920 def host_numa_multinode_ipc_supported(self) -> bool:
921 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
922 return bool( 2EF
923 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2EF
924 )
926 @property
927 def host_memory_pools_supported(self) -> bool:
928 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
929 IF CUDA_CORE_BUILD_MAJOR < 13:
930 return False
931 ELSE:
932 return bool( 2jkh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K BFdjdmZhok/eem0hfm1hgm2hhm3hpk:eim4hkmqkmmxjyjzjqmrmsmejfjgj3ErkXKUiagAoaF=jskbF
933 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2jkh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K BFdjdmZhok/eem0hfm1hgm2hhm3hpk:eim4hkmqkmmxjyjzjqmrmsmejfjgj3ErkXKUiagAoaF=jskbF
934 )
936 @property
937 def host_virtual_memory_management_supported(self) -> bool:
938 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
939 IF CUDA_CORE_BUILD_MAJOR < 13:
940 return False
941 ELSE:
942 return bool( 2iF0p1p2p
943 self._get_cached_attribute( 2iF0p1p2p
944 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2iF0p1p2p
945 )
946 )
948 @property
949 def host_alloc_dma_buf_supported(self) -> bool:
950 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
951 IF CUDA_CORE_BUILD_MAJOR < 13:
952 return False
953 ELSE:
954 return bool( 24i
955 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 24i
956 )
958 @property
959 def only_partial_host_native_atomic_supported(self) -> bool:
960 """bool: Link between the device and the host supports only some native atomic operations."""
961 IF CUDA_CORE_BUILD_MAJOR < 13:
962 return False
963 ELSE:
964 return bool( 2jF
965 self._get_cached_attribute( 2jF
966 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2jF
967 )
968 )
971class Device:
972 """Represent a GPU and act as an entry point for cuda.core features.
974 This is a singleton object that helps ensure interoperability
975 across multiple libraries imported in the process to both see
976 and use the same GPU device.
978 While acting as the entry point, many other CUDA resources can be
979 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
980 resource created through this device, will continue to refer to
981 this device's context.
983 Newly returned :obj:`~_device.Device` objects are thread-local singletons
984 for a specified device.
986 A pickled :obj:`~_device.Device` names its device by UUID. Unpickling
987 returns the device with that UUID in the receiving process, whatever its
988 ordinal is there, and raises ``RuntimeError`` if that device is not
989 visible. The pickled form is for processes on the same machine.
991 Note
992 ----
993 Will not initialize the GPU.
995 Parameters
996 ----------
997 device_id : int, optional
998 Device ordinal to return a :obj:`~_device.Device` object for.
999 Default value of `None` return the currently used device.
1001 """
1002 __slots__ = (
1003 "_device_id",
1004 "_memory_resource",
1005 "_has_inited",
1006 "_properties",
1007 "_resources",
1008 "_uuid",
1009 "_context",
1010 "__weakref__",
1011 )
1013 def __new__(cls, device_id: Device | int | None = None) -> Device:
1014 if isinstance(device_id, Device): 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehqNfhrNghsNhhtNihuNjhvNkhwNlhxNmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuqHiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSu7JTu`GUu8JVu9JWuOIXuFoGoHoIoJoKoLoMoSp, h L qL- yNi M Hp. ;Fj N {L/ =FnbO An: zNk xMP XQpb; l Q 7Pqb= m R YQrb? n S ZQIhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEb@HFb[HGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1eQo=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e#Q%e$Q'eaN(ebN)ecN*e=G+eRoHbSoIbnIJboIKb(LLb)LMbpINbqIObtLPbuLQb#JRb$JSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvm0QJh,u1QKh+L-u2QLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWk8PMh`oAmcF;x?I=x7k?xTMNhcj@x3QOh9PPh4QQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@ygN6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%mAN7h3kjzkz|o}olzmz@Inz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~oBN8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITb[MUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1015 return device_id 2wpxp/lBlqjrjypzpAp:l;l=lBp?lEl@l[l]lCpDp^lqNrNsNtNuNvNwNxN+k,k-k.k/k:k;k=kqH5k7J`G8J9JOI, L qL- yNM . N / O An: zNxMP XQ; Q 7P= R YQ? S ZQ@ T [ U ] V .jW ^ _ ` { | } ~ abbbcbdbebX Y Z 0 1 2 3 4 5 6 7 8 fb9 gb! hb# ib$ jb% rLsL@H[Hkb' lb( mb) YK#M$M%M:M;MZKeK0K1K=M'M?M(M)M@M*M2KlF+M~M#Q$QaNbNcN=GRoSonIoI(L)LpIqItLuL#J$J0Q1Q2Qbj8P?I7kTMcj3Q9P4QUMVMmknksj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh5h$k!lijjjkjgN#l$l%lAjBjCjAN@IBNEpFpGptk;eukvk@jViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkQLDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJLI[MMINIf g
1017 Device_ensure_cuda_initialized() 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1018 device_id = Device_resolve_device_id(device_id) 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1019 devices = Device_ensure_tls_devices(cls) 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1021 try: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1022 return devices[device_id] 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1023 except IndexError: 2QMRMCL
1024 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2QMRMCL
1026 def _check_context_initialized(self) -> None:
1027 if not self._has_inited: 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n+d,d-d.d/d:d;d=d?d@d[d]db !P]n*KnJ+K,K-K.KfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_KjKkKlKmK$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelfltOglhl*Pil+Pjlkl,PlluOmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0OBe1OBo2ODH3O/P:P;P=P?P@P[P]PFN^P_P4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPvLwLxLyLzLALOdPd$fsKBL3F)u4FoO+L'LGN`PyJQksF/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L_GRk:j2E?H-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUkymzm~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjsjtjdjijjjkjujvjwjxjyjzjgNAj+jejBjCj,j-jfjgjAN3kNQUiagAoBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MDi'mFnEiGn(m)m*mHnFiInGiJn+m,m-mKnHi-l.m/m:mLna f g * + IiMn;m=m?mNnJi.l@m[m]mOnKiPn^m_m`mQnLiRn{m|m}mSnMiTn~manbnUnNiVncndnenWnOiXnfngnhnYnPiZninjnkn0n_d5FRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%L0G1G2G3G4G5Gmj5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH0JPKQKRK1JgOhOSK4kAH!I#IUp$I%IBHNdcK'IVp(IWp)I*I+I,IdK^j*G+GPQ
1028 raise CUDAError( 2$f
1029 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?" 2$f
1030 )
1031 Context_check_open(self._context) 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n+d,d-d.d/d:d;d=d?d@d[d]db !P]n*KnJ+K,K-K.KfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_KjKkKlKmK$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelfltOglhl*Pil+Pjlkl,PlluOmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0OBe1OBo2ODH3O/P:P;P=P?P@P[P]PFN^P_P4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPvLwLxLyLzLALOdPd$fsKBL3F)u4FoO+L'LGN`PyJQksF/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L_GRk:j2E?H-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUkymzm~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjsjtjdjijjjkjujvjwjxjyjzjgNAj+jejBjCj,j-jfjgjAN3kNQUiagAoBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MDi'mFnEiGn(m)m*mHnFiInGiJn+m,m-mKnHi-l.m/m:mLna f g * + IiMn;m=m?mNnJi.l@m[m]mOnKiPn^m_m`mQnLiRn{m|m}mSnMiTn~manbnUnNiVncndnenWnOiXnfngnhnYnPiZninjnkn0n_d5FRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%L0G1G2G3G4G5Gmj5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH0JPKQKRK1JgOhOSK4kAH!I#IUp$I%IBHNdcK'IVp(IWp)I*I+I,IdK^j*G+GPQ
1034 @classmethod
1035 def get_all_devices(cls) -> tuple[Device, ...]:
1036 """
1037 Query the available device instances.
1039 Returns
1040 -------
1041 tuple of Device
1042 A tuple containing instances of available devices.
1043 """
1044 return cls._get_all_devices_from_cuda_driver() 2DoEo^dFoGoHoIoJoKoLoMoNoOoPoQo=G]M6F^M_M`M7F|L8FXI,GToTKUo*LCLVoiOoNZIWoXo2Jymzm[o]o0I1I^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqpDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ-lrpUKVK.lspDj3J4J5J6JtpjOkOlOmOnOupvp
1046 @classmethod
1047 def _get_all_devices_from_cuda_driver(cls):
1048 Device_ensure_cuda_initialized() 2DoEo^dFoGoHoIoJoKoLoMoNoOoPoQo=G]M6F^M_M`M7F|L8FXI,GToTKUo*LCLVoiOoNZIWoXo2Jymzm[o]o0I1I^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqpDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ-lrpUKVK.lspDj3J4J5J6JtpjOkOlOmOnOupvp
1049 return tuple(Device_ensure_tls_devices(cls)) 2DoEo^dFoGoHoIoJoKoLoMoNoOoPoQo=G]M6F^M_M`M7F|L8FXI,GToTKUo*LCLVoiOoNZIWoXo2Jymzm[o]o0I1I^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqpDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ-lrpUKVK.lspDj3J4J5J6JtpjOkOlOmOnOupvp
1051 def to_system_device(self) -> 'cuda.core.system.Device':
1052 """
1053 Get the corresponding :class:`cuda.core.system.Device` (which is used
1054 for NVIDIA Management Library (NVML) access) for this
1055 :class:`cuda.core.Device` (which is used for CUDA access).
1057 The devices are mapped to one another by their UUID.
1059 Returns
1060 -------
1061 cuda.core.system.Device
1062 The corresponding system-level device instance used for NVML access.
1063 """
1064 from cuda.core.system import Device as SystemDevice 2]M6F^M_M`M7F8FdNeN-M
1065 return SystemDevice(uuid=self.uuid) 2]M6F^M_M`M7F8FdNeN-M
1067 @property
1068 def device_id(self) -> int:
1069 """Return device ordinal."""
1070 return self._device_id 2XpYpCe`dDe{dEe|dFe}dGe~dHeaewpxpDm/lBlqjrjqnrn;jypzpAp:l;l=lBp?lEl@l[l]lCpDp^lnjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J;L-QmF?G@G)JqHnFoFpFsn5k'f(f)f[G]G*f+f{H,f-f.f/fqF:f;f=ErF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~H[EvOnK}L8M/E-IsI.I.QwOxO;GoKpK9MqKrK7J`G8J9JOI, qL- yN. 0P/ 1PAn: zNxMXQ; 7P= YQ? ZQ@ DH[ .M] /M.j^ _ ` { | } ~ abbbcbdbebQQ%QRQ'QSQ(Qfb2Pgb3Phb4Pib5PjbrLsL@H[HkbTQlbUQmbVQYK#M$M%M:M;MZKeK0K1K=M'M?M(M)M@M*M2KlF+M=GRoSonIoI(L)LpIqItLuL%fOdPd$f,G3F*LCLoN4FFH?Jvm0Q1Q+L2QvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsM,L_GRk:j2E!MBnCnDnEnbjwexeyezeymzm8PcF?I7kTMcj3Q9P4QUMVMmknktMCH!J0lsjtj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh5h$k!lijjjkjgN#l$l%lAjBjCjAN@IBNBJCJEpFpGptk;e?jukvk@j'kViWiXi=e?eYiwkxkykzkAkBkDkfe[jZiljEkFkQLtmumuMvMAe0i1i4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.EDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJLI[MMINIDiEiFiGiHia f g IiJiKiLiMiNiOiPi_d5FzH0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/Q/H+G:H;H=H
1072 @property
1073 def pci_bus_id(self) -> str:
1074 """Return a PCI Bus Id string for this device."""
1075 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2|L?J-M
1076 return bus_id[:12].decode() 2|L?J-M
1078 def can_access_peer(self, peer: Device | int) -> bool:
1079 """Check if this device can access memory from the specified peer device.
1081 Queries whether peer-to-peer memory access is supported between this
1082 device and the specified peer device.
1084 Parameters
1085 ----------
1086 peer : Device | int
1087 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1088 """
1089 peer = Device(peer)
1090 cdef int d1 = <int> self.device_id
1091 cdef int d2 = <int> peer.device_id
1092 if d1 == d2:
1093 return True
1094 cdef int value = 0
1095 with nogil:
1096 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1097 return bool(value)
1099 @property
1100 def uuid(self) -> str:
1101 """Return a UUID for the device.
1103 Returns 16-octets identifying the device. If the device is in
1104 MIG mode, returns its MIG UUID which uniquely identifies the
1105 subscribed MIG compute instance.
1107 Note
1108 ----
1109 MIG UUID is only returned when device is in MIG mode and the
1110 driver is older than CUDA 11.4.
1112 The UUID is cached after first access to avoid repeated CUDA API calls.
1114 """
1115 cdef cydriver.CUuuid uuid
1116 cdef cydriver.CUdevice dev
1117 cdef bytes uuid_b
1118 cdef str uuid_hex
1120 if self._uuid is None: 2/E-IsI.ISp, 5Qh 6QL qL- yNi M Hp. ;Fj 0PN {L/ =Fnb1PO An: zNk xMP pb; l Q qb= m R rb? n S Be@ o DHT sbtbubvbwbxbybzbAbBbCbOk[ d .MU Pk] p /MV .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr s t u v w x y z A B C X QQY Z 7Q0 1 RQ2 3 8Q4 5 SQ6 7 9Q8 IpfbtFD 2P9 WQgbuFE 3P! JphbvFF 4P# Kpib?FG 5P$ WIjbH % rLDbsLEb@HFb[HGbfMkbI TQ' gMlbJ UQ( TpmbK VQ) YKZK0K1K2K=GRoHbSoIbnIJboIKb(LLb)LMbpINbqIObtLPbuLQbRbSb]M6F^M_M`M7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskLITbUbMIVbNIWbkNUKVKf g * + lNmN{M|M
1121 dev = self._device_id 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M
1122 with nogil: 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M
1123 IF CUDA_CORE_BUILD_MAJOR == 12:
1124 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1125 ELSE: # 13.0+
1126 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M
1127 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M
1128 uuid_hex = uuid_b.hex() 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M
1129 # 8-4-4-4-12
1130 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M
1131 return self._uuid 2/E-IsI.ISp, 5Qh 6QL qL- yNi M Hp. ;Fj 0PN {L/ =Fnb1PO An: zNk xMP pb; l Q qb= m R rb? n S Be@ o DHT sbtbubvbwbxbybzbAbBbCbOk[ d .MU Pk] p /MV .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr s t u v w x y z A B C X QQY Z 7Q0 1 RQ2 3 8Q4 5 SQ6 7 9Q8 IpfbtFD 2P9 WQgbuFE 3P! JphbvFF 4P# Kpib?FG 5P$ WIjbH % rLDbsLEb@HFb[HGbfMkbI TQ' gMlbJ UQ( TpmbK VQ) YKZK0K1K2K=GRoHbSoIbnIJboIKb(LLb)LMbpINbqIObtLPbuLQbRbSb]M6F^M_M`M7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskLITbUbMIVbNIWbkNUKVKf g * + lNmN{M|M
1133 @property
1134 def name(self) -> str:
1135 """Return the device name."""
1136 # Use 256 characters to be consistent with CUDA Runtime
1137 cdef int LENGTH = 256 2/EeK^GFHnN
1138 cdef bytes name = bytes(LENGTH) 2/EeK^GFHnN
1139 cdef char* name_ptr = name 2/EeK^GFHnN
1140 cdef cydriver.CUdevice this_dev = self._device_id 2/EeK^GFHnN
1141 with nogil: 2/EeK^GFHnN
1142 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2/EeK^GFHnN
1143 name = name.split(b"\0")[0] 2/EeK^GFHnN
1144 return name.decode() 2/EeK^GFHnN
1146 @property
1147 def properties(self) -> DeviceProperties:
1148 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1149 if self._properties is None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%ftK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
1150 self._properties = DeviceProperties._init(self._device_id) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
1152 return self._properties 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%ftK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd
1154 @property
1155 def resources(self) -> DeviceResources:
1156 """Return the hardware resource query namespace for this device."""
1157 if self._resources is None: 2b YosiZo0otic HdIduiviwixiyiziAiBi1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oCi@o4k
1158 self._resources = DeviceResources._init(self._device_id) 2b YosiZo0otic HdIduiviwixiyiziAiBi1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oCi@o4k
1159 return self._resources 2b YosiZo0otic HdIduiviwixiyiziAiBi1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oCi@o4k
1161 @property
1162 def compute_capability(self) -> ComputeCapability:
1163 """Return a named tuple with 2 fields: major and minor."""
1164 cdef DeviceProperties prop = self.properties 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m'd(d)d*dNd
1165 cached = prop._cache.get("compute_capability") 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m'd(d)d*dNd
1166 if cached is not None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m'd(d)d*dNd
1167 return cached 2Xb+k,k-k.k/k:k;k=k*l+l,l#j$j%jCoIkc HdIdlkbjJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdJdcdKddda edfdgdhdidjdkdLdldMdmdndodpdqdrdsdtdudvdwdxdydzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mNd
1168 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd
1169 return prop._cache.setdefault("compute_capability", cc) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd
1171 @property
1172 def arch(self) -> str:
1173 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1174 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2Xb+k,k-k.k/k:k;k=k*l+l,l#j$j%jCoIkc HdIdlkbjJkKkLkYbwexeZb0byezeAJ1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!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~cadbdcddda edfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mNd
1176 @property
1177 def context(self) -> Context:
1178 """Return the :obj:`~_context.Context` associated with this device.
1180 Note
1181 ----
1182 Device must be initialized.
1184 """
1185 self._check_context_initialized() 2$f)uoO+L'LGN2EGnJn-la Mn.lPnRnTnVnXnZn5FzH
1186 return self._context 2$f)uoO+L'LGN2EGnJn-la Mn.lPnRnTnVnXnZn5FzH
1188 @property
1189 def memory_resource(self) -> MemoryResource:
1190 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1191 cdef int attr, device_id
1192 if self._memory_resource is None: 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G)Q*f*Q+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1193 # If the device is in TCC mode, or does not support memory pools for some other reason,
1194 # use the SynchronousMemoryResource which does not use memory pools.
1195 device_id = self._device_id 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1196 with nogil: 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1197 HANDLE_RETURN( 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1198 cydriver.cuDeviceGetAttribute( 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1199 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1200 )
1201 )
1202 if attr == 1: 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1203 from cuda.core._memory import DeviceMemoryResource 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1204 self._memory_resource = DeviceMemoryResource(self._device_id) 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1205 else:
1206 from cuda.core._memory._synchronous_memory_resource import ( 2mF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmAeDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1207 _SynchronousMemoryResource,
1208 )
1209 self._memory_resource = _SynchronousMemoryResource( 2mF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmAeDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1210 self._device_id, self._context) 2mF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmAeDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1212 return self._memory_resource 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G)Q*f*Q+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1214 @memory_resource.setter
1215 def memory_resource(self, MemoryResource mr not None: MemoryResource) -> None:
1216 self._memory_resource = mr 23F4F
1218 @property
1219 def default_stream(self) -> Stream:
1220 """Return a default CUDA :obj:`~_stream.Stream` token.
1222 The type of default stream returned depends on if the environment
1223 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1225 If set, returns a per-thread default stream. Otherwise returns
1226 the legacy stream.
1228 A default-stream token uses the device that is current when the token
1229 is used.
1231 """
1232 return default_stream() 2wpxp/lBlqjrjypzpAp:l;l=lBp?lEl@l[l]lCpDp^l5kYljk:QbecedeeeyOzOAOBOCOqLyNHp;F0P{L=F1PAnzNxM7P;Q=Q?QOk3p.MPk4p/M@Q~L[QaM]QbM^QcM_QdM`QeM{QrHsH|Q}QtHuH~QaRvHwHbRcRQQ%Q7QdRRQ'Q8QeRSQ(Q9QIptF2PWQuF3PJpvF4PKp?F5PWI5prLsL@H[HfMxHTQgM{GUQTpyHVQ#M$M%MeK'M(M)M*MlF+MRoSonIoI(L)LpIqItLuLOdPd3F4Fwmxm)j*jfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRbIcIdIeIfIgIhIiIjIkIlImIYRymzm8PAmcF?I7kcj9P!J8khjZRsjtjdj!kbg#kcg7l8lok/epk:e$k9lqkgNAj+jejBjCj,j-jfjgj@I3ErkUiagAoDiEiFiGiHia f g IiJiKiLiMiNiOiPiwM0G1G2G3G4G5GmjLp6G7G8G9G!G#G$G%G'G(G)GGHUpVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H
1234 def __int__(self) -> int:
1235 """Return device_id."""
1236 return self._device_id 2hNiNjN;LOdPd
1238 def __repr__(self) -> str:
1239 return f"<Device {self._device_id} ({self.name})>" 2/E^GnN
1241 def __hash__(self) -> int:
1242 return hash(self.uuid) 2/E-IsI.I, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbvJYIwJxJThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNf g * + lNmN{M|M
1244 def __eq__(self, other: object) -> bool:
1245 if not isinstance(other, Device): 2nK/EsI;GoKpKqKrK, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbOMYIPMSMThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWb!Q+Qf g * + {M|MbKAHcK^j
1246 return NotImplemented 2/EsISM!Q+QbK
1247 return self._device_id == other._device_id 2nK/E;GoKpKqKrK, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbOMYIPMThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWb!Qf g * + {M|MAHcK^j
1249 def __reduce__(self) -> tuple[object, ...]:
1250 # Device ordinals are per process; the receiver maps the UUID to its own device.
1251 return _device_from_uuid, (self.uuid,) 2Sp5Q6QqLyNHp;F0P{L=F1PAnzNxMIptF2PWQuF3PJpvF4PKp?F5PrLsL@H[HtLuLTKUKVK
1253 def set_current(self, Context ctx: Context | None = None) -> Context | None:
1254 """Set device to be used for GPU executions.
1256 Initializes CUDA and sets the calling thread to a valid CUDA
1257 context. By default the primary context is used, but optional `ctx`
1258 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1260 Providing a `ctx` causes the previous set context to be popped and returned.
1262 If `ctx` was created on a different device than this receiver, the call
1263 is delegated to that device's own :meth:`set_current`. This keeps the
1264 owning device's bookkeeping consistent and lets a context this method
1265 handed out for a foreign device be pushed back through any ``Device``
1266 object, matching the CUDA context stack's own thread-wide semantics.
1268 Parameters
1269 ----------
1270 ctx : :obj:`~_context.Context`, optional
1271 Optional context to push onto this device's current thread stack.
1273 Returns
1274 -------
1275 :obj:`~_context.Context`, optional
1276 The previous context, or ``None`` if no context was current. When
1277 returned, its ``device_id`` identifies the device that was
1278 previously current.
1280 Examples
1281 --------
1282 Acts as an entry point of this object. Users always start a code by
1283 calling this method, e.g.
1285 >>> from cuda.core import Device
1286 >>> dev0 = Device(0)
1287 >>> dev0.set_current()
1288 >>> # ... do work on device 0 ...
1290 """
1291 cdef ContextHandle h_context
1292 cdef cydriver.CUcontext prev_ctx, curr_ctx
1293 cdef cydriver.CUdevice prev_dev
1294 cdef Context prev_owned = None 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo'L.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdId-LuiviwiEv2Exiyi.LziAi?HBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIv/LCi:L@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjD4kkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1296 if ctx is not None: 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo'L.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdId-LuiviwiEv2Exiyi.LziAi?HBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIv/LCi:L@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjD4kkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1297 Context_check_open(ctx) 2b 'L-L2E.L?H/L:L4k
1298 if ctx._device_id != self._device_id: 2b 'L-L2E.L?H/L4k
1299 # The CUDA context stack is per-thread, not per-Device-object,
1300 # so pushing/popping a foreign-device context is delegated to
1301 # the device that owns it; its own bookkeeping (_context,
1302 # _has_inited) is what should track this push, not ours.
1303 return Device(ctx._device_id).set_current(ctx)
1304 if self._has_inited and self._context is not None: 2b 'L-L2E.L?H/L4k
1305 prev_owned = self._context 2b 'L-L2E.L?H/L4k
1306 curr_ctx = as_cu(ctx._h_context) 2b 'L-L2E.L?H/L4k
1307 prev_ctx = NULL 2b 'L-L2E.L?H/L4k
1308 with nogil: 2b 'L-L2E.L?H/L4k
1309 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&prev_ctx)) 2b 'L-L2E.L?H/L4k
1310 if prev_ctx != NULL: 2b 'L-L2E.L?H/L4k
1311 HANDLE_RETURN(cydriver.cuCtxGetDevice(&prev_dev)) 2b -L2E.L?H/L4k
1312 # cuCtxSetCurrent replaces the top of the thread's context stack
1313 # in one driver call (or binds ctx when nothing is current), so
1314 # a failure leaves the previous context current instead of
1315 # leaving the thread with no context, as a failed pop-then-push
1316 # would.
1317 HANDLE_RETURN(cydriver.cuCtxSetCurrent(curr_ctx)) 2b 'L-L2E.L?H/L4k
1318 self._has_inited = True 2b 'L-L2E.L?H/L4k
1319 self._context = ctx # Store owning context reference 2b 'L-L2E.L?H/L4k
1320 if prev_ctx != NULL: 2b 'L-L2E.L?H/L4k
1321 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2b -L2E.L?H/L4k
1322 return prev_owned 2b -L2E.L?H/L4k
1323 return Context._from_handle( 22E
1324 Context, create_context_handle_ref(prev_ctx), <int>prev_dev) 22E
1325 else:
1326 # use primary ctx
1327 h_context = get_primary_context(self._device_id) 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1328 if h_context.get() == NULL: 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1329 HANDLE_RETURN(get_last_error())
1330 raise RuntimeError(
1331 f"Failed to retain the primary context for device {self._device_id}"
1332 )
1333 with nogil: 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1334 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1335 self._has_inited = True 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1336 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1338 def create_context(self, options: ContextOptions | None = None) -> Context:
1339 """Create a new :obj:`~_context.Context` object.
1341 Note
1342 ----
1343 The newly created context will not be set as current.
1345 Parameters
1346 ----------
1347 options : :obj:`~_context.ContextOptions`, optional
1348 Customizable dataclass for context creation options.
1350 Returns
1351 -------
1352 :obj:`~_context.Context`
1353 Newly created context object.
1355 """
1356 cdef int i
1357 cdef object resources
1358 cdef object res
1359 cdef SMResource sm_res
1360 cdef WorkqueueResource wq_res
1362 if options is None: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfN6PCi:L4k
1363 raise ValueError( 26P
1364 "options with device resources must be provided to create a green context"
1365 )
1367 options = check_or_create_options(ContextOptions, options, "Context options") 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfN6PCi:L4k
1368 if options.resources is None: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfN6PCi:L4k
1369 raise ValueError( 26P
1370 "ContextOptions.resources must be provided to create a green context"
1371 )
1373 resources = tuple(options.resources) 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfNCi:L4k
1374 if len(resources) == 0: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfNCi:L4k
1375 raise ValueError("ContextOptions.resources must not be empty") 2pO
1377 cdef vector[cydriver.CUdevResource] c_resources
1378 c_resources.resize(len(resources)) 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MfNCi:L4k
1380 for i, res in enumerate(resources): 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MfNCi:L4k
1381 if isinstance(res, SMResource): 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MfNCi:L4k
1382 sm_res = <SMResource>res 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MCi:L4k
1383 if not sm_res._is_usable: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MCi:L4k
1384 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2}M
1385 c_resources[i] = sm_res._resource 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k
1386 elif isinstance(res, WorkqueueResource): 2:jfN
1387 wq_res = <WorkqueueResource>res 2:j
1388 c_resources[i] = wq_res._wq_config_resource 2:j
1389 else:
1390 raise TypeError(f"Unsupported context resource type: {type(res)}") 2fN
1392 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k
1393 c_resources.data(),
1394 <unsigned int>(c_resources.size()),
1395 <cydriver.CUdevice>(self._device_id), 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k
1396 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1397 )
1398 if h_green.get() == NULL: 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k
1399 HANDLE_RETURN(get_last_error())
1400 raise RuntimeError("Failed to create CUDA green context")
1402 return Context._from_green_ctx(Context, h_green, self._device_id) 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k
1404 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream:
1405 """Create or wrap a :obj:`~_stream.Stream` object.
1407 New stream objects can be created in two different ways:
1409 1) Create a new CUDA stream with customizable ``options``.
1410 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1412 Option (2) internally holds a reference to the foreign object
1413 such that the lifetime is managed.
1415 Note
1416 ----
1417 Device must be initialized. New streams are created on this device.
1419 Parameters
1420 ----------
1421 obj : :obj:`~_stream.IsStreamType`, optional
1422 Any object supporting the ``__cuda_stream__`` protocol.
1423 options : :obj:`~_stream.StreamOptions`, optional
1424 Customizable dataclass for stream creation options.
1426 Returns
1427 -------
1428 :obj:`~_stream.Stream`
1429 Newly created stream object.
1431 """
1432 self._check_context_initialized() 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.nb !P]n*KnJ+K,K-K.KpJqJ/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_K$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflglhl*Pil+Pjlkl,PllmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHBeBoDH/P:P;P=P?P@P[P]PFN^P_PvLwLxLyLzLAL$fBL)uoO`PyJQksF/jDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L2E-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUk~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjijjjkjujvjwjxjyjzjAN3kNQUiBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MFnHnInKnLna * + NnOnQnSnUnWnYn0n_dRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!L#LbK$L%L8nWJLpXJYJZJpH1JgOhONd+GPQ
1433 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.nb !P]n*KnJ+K,K-K.KpJqJ/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_K$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflglhl*Pil+Pjlkl,PllmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHBeBoDH/P:P;P=P?P@P[P]PFN^P_PvLwLxLyLzLAL$fBL)uoO`PyJQksF/jDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L2E-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUk~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjijjjkjujvjwjxjyjzjAN3kNQUiBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MFnHnInKnLna * + NnOnQnSnUnWnYn0n_dRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!L#LbK$L%L8nWJLpXJYJZJpH1JgOhONd+GPQ
1435 def create_event(self, options: EventOptions | None = None) -> Event:
1436 """Create an :obj:`~_event.Event` on this device without recording it to a :obj:`~_stream.Stream`.
1438 Note
1439 ----
1440 Device must be initialized.
1442 Parameters
1443 ----------
1444 options : :obj:`EventOptions`, optional
1445 Customizable dataclass for event creation options.
1447 Returns
1448 -------
1449 :obj:`~_event.Event`
1450 Newly created event object.
1452 """
1453 self._check_context_initialized() 2mJ+d,d-d.d/d:d;d=d?d@d[d]dfKmnoJpJqJnnrJCmDmgKhKonpniK;jsJ#jjKkKlKmKtJ$juJ%jFNsK)uyJsF/juK]jzJ2E'm(m)m*m+m,m-m.m/m:ma ;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnkn
1454 cdef Context ctx = self._context 2mJ+d,d-d.d/d:d;d=d?d@d[d]dfKmnoJpJqJnnrJCmDmgKhKonpniK;jsJ#jjKkKlKmKtJ$juJ%jFNsK)uyJsF/juK]jzJ2E'm(m)m*m+m,m-m.m/m:ma ;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnkn
1455 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2mJ+d,d-d.d/d:d;d=d?d@d[d]dfKmnoJpJqJnnrJCmDmgKhKonpniK;jsJ#jjKkKlKmKtJ$juJ%jFNsK)uyJsF/juK]jzJ2E'm(m)m*m+m,m-m.m/m:ma ;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnkn
1457 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1458 """Allocate device memory from a specified stream.
1460 Allocates device memory of `size` bytes on the specified `stream`
1461 using the memory resource currently associated with this Device.
1463 Note
1464 ----
1465 Device must be initialized.
1467 Parameters
1468 ----------
1469 size : int
1470 Number of bytes to allocate.
1471 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1472 Keyword-only. The stream establishing the stream ordering semantic.
1473 Must be passed explicitly; pass ``self.default_stream`` to use
1474 the default stream.
1476 Returns
1477 -------
1478 :obj:`~_memory.Buffer`
1479 Newly created buffer object.
1481 """
1482 self._check_context_initialized() 2snOdPd$f3F4F_GRk:jBnCnDnEnymzmDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5GmjNd
1483 return self.memory_resource.allocate(size, stream=stream) 2snOdPd$f3F4F_GRk:jBnCnDnEnymzmDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5GmjNd
1485 def sync(self) -> None:
1486 """Synchronize this device's bound context.
1488 Waits for all preceding work in this device's bound :obj:`~_context.Context`
1489 to complete. Only that context is synchronized, not the device as a
1490 whole; work queued in a different context on the same device (e.g. a
1491 green context) is unaffected.
1493 Note
1494 ----
1495 Device must be initialized.
1497 """
1498 self._check_context_initialized() 2^I`I~IaJbJqFrFtOuODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPOdPd)uGN2EHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOcjhjsjtjdjgNAj+jejBjCj,j-jfjgjUiagAof g
1499 cdef Context ctx = self._context 2^I`I~IaJbJqFrFtOuODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPOdPd)uGN2EHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOcjhjsjtjdjgNAj+jejBjCj,j-jfjgjUiagAof g
1500 HANDLE_RETURN(context_synchronize(ctx._h_context)) 2^I`I~IaJbJqFrFtOuODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPOdPd)uGN2EHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOcjhjsjtjdjgNAj+jejBjCj,j-jfjgjUiagAof g
1502 def create_graph_builder(self) -> GraphBuilder:
1503 """Create a new :obj:`~graph.GraphBuilder` on this device.
1505 Returns
1506 -------
1507 :obj:`~graph.GraphBuilder`
1508 Newly created graph builder object.
1510 """
1511 from cuda.core.graph._graph_builder import GraphBuilder 2[I]I_I{I|I}ITIcJdJeJ_j`jEjFjUIGj{jfJgJHj|j}jhJIjiJJjKjVIjJ~jakbkkJlJLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jnJhNiNjN%J'J(JmF)JqHnFoFpF'jckdkekfkgkhkik(jDNEN)u2ECHijjjkjujvjwjxjyjzjViWiXiYiZiUJ8n
1513 self._check_context_initialized() 2[I]I_I{I|I}ITIcJdJeJ_j`jEjFjUIGj{jfJgJHj|j}jhJIjiJJjKjVIjJ~jakbkkJlJLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jnJhNiNjN%J'J(JmF)JqHnFoFpF'jckdkekfkgkhkik(jDNEN)u2ECHijjjkjujvjwjxjyjzjViWiXiYiZiUJ8n
1514 return GraphBuilder._init(self.create_stream()) 2[I]I_I{I|I}ITIcJdJeJ_j`jEjFjUIGj{jfJgJHj|j}jhJIjiJJjKjVIjJ~jakbkkJlJLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jnJhNiNjN%J'J(JmF)JqHnFoFpF'jckdkekfkgkhkik(jDNEN)u2ECHijjjkjujvjwjxjyjzjViWiXiYiZiUJ8n
1516 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray:
1517 """Create an :obj:`~cuda.core.texture.OpaqueArray` on this device.
1519 Allocates an opaque, hardware-laid-out CUDA array for texture/surface
1520 access.
1522 Note
1523 ----
1524 Device must be initialized.
1526 Parameters
1527 ----------
1528 options : :obj:`~cuda.core.texture.OpaqueArrayOptions`
1529 Allocation options (shape, format, channels, surface flag).
1531 Returns
1532 -------
1533 :obj:`~cuda.core.texture.OpaqueArray`
1534 Newly created opaque array.
1536 .. versionadded:: 1.1.0
1537 """
1538 from cuda.core.texture._array import _create_opaque_array 2?H5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH4kAH!I#I%IBHNd'I)I*I+I,I^j*G
1540 self._check_context_initialized() 2?H5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH4kAH!I#I%IBHNd'I)I*I+I,I^j*G
1541 return _create_opaque_array(options, self._context, self._device_id) 2?H5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH4kAH!I#I%IBHNd'I)I*I+I,I^j*G
1543 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray:
1544 """Create a :obj:`~cuda.core.texture.MipmappedArray` on this device.
1546 Allocates a mipmapped CUDA array for texture/surface access across
1547 levels.
1549 Note
1550 ----
1551 Device must be initialized.
1553 Parameters
1554 ----------
1555 options : :obj:`~cuda.core.texture.MipmappedArrayOptions`
1556 Allocation options (shape, format, channels, levels, surface flag).
1558 Returns
1559 -------
1560 :obj:`~cuda.core.texture.MipmappedArray`
1561 Newly created mipmapped array.
1563 .. versionadded:: 1.1.0
1564 """
1565 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2pH0JPKQKRK1JgOhOSK$I(I*G
1567 self._check_context_initialized() 2pH0JPKQKRK1JgOhOSK$I(I*G
1568 return _create_mipmapped_array(options, self._context, self._device_id) 2pH0JPKQKRK1JgOhOSK$I(I*G
1570 def create_texture_object(
1571 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None
1572 ) -> TextureObject:
1573 """Create a :obj:`~cuda.core.texture.TextureObject` on this device.
1575 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` /
1576 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d
1577 :obj:`~cuda.core.Buffer`, wrapped in a
1578 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for
1579 kernel-side sampled reads. The resource must belong to this device.
1581 Note
1582 ----
1583 Device must be initialized.
1585 Parameters
1586 ----------
1587 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1588 The memory backing the texture.
1589 options : :obj:`~cuda.core.texture.TextureObjectOptions`
1590 Sampling state (address/filter/read modes, normalization, etc.).
1592 Returns
1593 -------
1594 :obj:`~cuda.core.texture.TextureObject`
1595 Newly created texture object.
1597 .. versionadded:: 1.1.0
1598 """
1599 from cuda.core.texture._texture import _create_texture_object 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G
1601 self._check_context_initialized() 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G
1602 return _create_texture_object( 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G
1603 resource, options, self._context, self._device_id) 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G
1605 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject:
1606 """Create a :obj:`~cuda.core.texture.SurfaceObject` on this device.
1608 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a
1609 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for
1610 kernel-side typed load/store. The backing array must have been created
1611 with ``is_surface_load_store=True`` and must belong to this device.
1613 Note
1614 ----
1615 Device must be initialized.
1617 Parameters
1618 ----------
1619 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1620 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with
1621 ``is_surface_load_store=True``.
1623 Returns
1624 -------
1625 :obj:`~cuda.core.texture.SurfaceObject`
1626 Newly created surface object.
1628 .. versionadded:: 1.1.0
1629 """
1630 from cuda.core.texture._surface import _create_surface_object 24kAH!I#IUp$I%IBH*G
1632 self._check_context_initialized() 24kAH!I#IUp$I%IBH*G
1633 return _create_surface_object( 24kAH!I#IUp$I%IBH*G
1634 resource, self._context, self._device_id) 24kAH!I#IUp$I%IBH*G
1637def _device_from_uuid(device_uuid: str) -> Device:
1638 """Return the visible device whose :attr:`Device.uuid` is ``device_uuid``.
1640 Device ordinals are per process (``CUDA_VISIBLE_DEVICES`` can renumber
1641 devices), so objects that cross a process boundary name their devices by
1642 UUID, and the receiving process maps each UUID back with this function.
1644 Raises
1645 ------
1646 RuntimeError
1647 If no device visible to this process has the UUID.
1648 """
1649 devices = Device.get_all_devices() 2=GTKUKVK
1650 for device in devices: 2=GTKUKVK
1651 if device.uuid == device_uuid: 2=GTKUKVK
1652 return device 2=GTKUKVK
1653 visible = ", ".join(f"{device.device_id} ({device.uuid})" for device in devices) or "none"
1654 raise RuntimeError(
1655 f"no CUDA device visible to this process has UUID {device_uuid}; the visible devices are: "
1656 f"{visible}. Make the device visible to this process, for example through CUDA_VISIBLE_DEVICES."
1657 )
1660cdef inline int Device_ensure_cuda_initialized() except? -1:
1661 """Initialize CUDA driver and check version compatibility (once per process)."""
1662 global _is_cuInit
1663 if _is_cuInit is False: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1664 with _lock, nogil:
1665 HANDLE_RETURN(cydriver.cuInit(0))
1666 _is_cuInit = True
1667 IF CUDA_CORE_BUILD_MAJOR >= 13:
1668 # cuda-bindings 13.3 added this function. The 12.x line does not have it.
1669 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1670 warn_if_cuda_major_version_mismatch()
1671 return 0 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1674cdef inline int Device_resolve_device_id(device_id) except? -1:
1675 """Resolve device_id, defaulting to current device or 0."""
1676 cdef cydriver.CUdevice dev
1677 cdef cydriver.CUcontext ctx
1678 cdef cydriver.CUresult err
1679 if device_id is None: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1680 with nogil: 2Xb[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALCo%fOdPdsKBLtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmyJQk/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMwmxme lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHkSkTkUk5m6m7m8mVkWkAm7kcjmknk9m!mXkYkBm#mZk0k1k2ktM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj$m%m3krkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYmln^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G
1681 err = cydriver.cuCtxGetDevice(&dev) 2Xb[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALCo%fOdPdsKBLtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmyJQk/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMwmxme lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHkSkTkUk5m6m7m8mVkWkAm7kcjmknk9m!mXkYkBm#mZk0k1k2ktM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj$m%m3krkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYmln^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G
1682 if err == cydriver.CUresult.CUDA_SUCCESS: 2Xb[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALCo%fOdPdsKBLtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmyJQk/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMwmxme lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHkSkTkUk5m6m7m8mVkWkAm7kcjmknk9m!mXkYkBm#mZk0k1k2ktM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj$m%m3krkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYmln^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G
1683 return int(dev) 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALsKBLyJuK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMe lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHk7kcjmknkBmtM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgjrkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegcImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAdTmUmVmWm_dXmYmZmTJ0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G
1684 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1685 with nogil: 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob
1686 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob
1687 if <void*>(ctx) != NULL: 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob
1688 raise RuntimeError(
1689 "internal cuda.core error, please report: cuCtxGetDevice returned "
1690 "CUDA_ERROR_INVALID_CONTEXT while a context is current"
1691 )
1692 return 0 # cudart behavior 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob
1693 else:
1694 HANDLE_RETURN(err)
1695 elif device_id < 0: 2Xb6p7p8p9p!p#p$p%p'pTI(p)p*p+p,p-p.p/p:p;p=p?p@p[p]pEj^pFj_pUI`pGj{p|p}p~pHjaqbqcqdqeqIjfqgqhqiqJjjqKjkqVIlqmqnqoqpqqqrqsqtquqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=q?q@q[q]qMp^qNp_q`q{q|q}q~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.FrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,rPp-r.r/r/F:r;r=r?r@r:F[r]rQp^r_r]n`rRp{r|r}r~rasbscswpdsesfsgshsisjskslsmsnsospsqsrssstsxpusvswsxsyszsAsBsCsDsEsFsGsmnHsoJIsJsKsnnLsrJMsCmNsDmOsPsQsonRspnSsTs/lUsVsqjWsrjXsYsZs0s1s2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!s#s@l$s[l%s]l'sCp(sDp)s^l*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tmF5t6t7t8t9t!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~taubucudueu?Gfu@Ggu)JhuiunFjuoFkupFlumunuoupuqurusutu'juuvuwuxuyuzuAurIBusnCuEoDuEuFu(jGuHuIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f]k^k_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~HblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhePu8MIe/EJe-IKesILe.IMeNeieQujebe;G^doKkepKceOeledeRumeeePe9MQeReqKnerKoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JUo*L/JCL:J^GxJ;JVoSM=J4F*u@JZIWo+uJh,uKh+L-uLhXo.u/u:u;u=u?uzJ@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5w6w7w8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xMh`ocF;x=x?xTMNh@xOhPhQhRh{oUMzoVMSh[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylydjmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyokWy/eXyYyZy0y1y2y3y4y5ypk6y:e7y8y9y!y#y$y%y'yqk(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzejczdzezfzgzfjhzgjiz7hjzkz|o}olzmznz3EozrkpzqzUirzagszAotzuzvzwzxz~o8hyzapBJzzCJAzbpcpdpBzCzDzEzFz?jGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9zfe!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-zCN~bQLacbc.zcc/zdcecfcAe:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4B5B6B}J7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkC5FlCmCnCoCpCqCrC~JsCtCuCvCwCaKxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0CVJ1C2C3C4C5C6C7C8n8C9C!CLp#C$C%C'C(C)C*C+C,C-C.C/C0J:C;C=C?C@C[C]C^C_C`C{C6G|C7G}C8G~C9GaD!GbD#GcDdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlDmDnDUpoDpDqDrDNdsDupcKtDuDVpvDwDWpxDyDzDADBDCDDDEDFD^jvpGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1696 raise ValueError(f"device_id must be >= 0, got {device_id}") 2*L
1697 return device_id 2Xb6p7p8p9p!p#p$p%p'pTI(p)p*p+p,p-p.p/p:p;p=p?p@p[p]pEj^pFj_pUI`pGj{p|p}p~pHjaqbqcqdqeqIjfqgqhqiqJjjqKjkqVIlqmqnqoqpqqqrqsqtquqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=q?q@q[q]qMp^qNp_q`q{q|q}q~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.FrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,rPp-r.r/r/F:r;r=r?r@r:F[r]rQp^r_r]n`rRp{r|r}r~rasbscswpdsesfsgshsisjskslsmsnsospsqsrssstsxpusvswsxsyszsAsBsCsDsEsFsGsmnHsoJIsJsKsnnLsrJMsCmNsDmOsPsQsonRspnSsTs/lUsVsqjWsrjXsYsZs0s1s2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!s#s@l$s[l%s]l'sCp(sDp)s^l*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tmF5t6t7t8t9t!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~taubucudueu?Gfu@Ggu)JhuiunFjuoFkupFlumunuoupuqurusutu'juuvuwuxuyuzuAurIBusnCuEoDuEuFu(jGuHuIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f]k^k_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~HblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhePu8MIe/EJe-IKesILe.IMeNeieQujebe;G^doKkepKceOeledeRumeeePe9MQeReqKnerKoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JUo*L/JCL:J^GxJ;JVoSM=J4F*u@JZIWo+uJh,uKh+L-uLhXo.u/u:u;u=u?uzJ@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5w6w7w8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xMh`ocF;x=x?xTMNh@xOhPhQhRh{oUMzoVMSh[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylydjmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyokWy/eXyYyZy0y1y2y3y4y5ypk6y:e7y8y9y!y#y$y%y'yqk(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzejczdzezfzgzfjhzgjiz7hjzkz|o}olzmznz3EozrkpzqzUirzagszAotzuzvzwzxz~o8hyzapBJzzCJAzbpcpdpBzCzDzEzFz?jGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9zfe!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bQLacbc.zcc/zdcecfcAe:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4B5B6B}J7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkC5FlCmCnCoCpCqCrC~JsCtCuCvCwCaKxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0CVJ1C2C3C4C5C6C7C8n8C9C!CLp#C$C%C'C(C)C*C+C,C-C.C/C0J:C;C=C?C@C[C]C^C_C`C{C6G|C7G}C8G~C9GaD!GbD#GcDdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlDmDnDUpoDpDqDrDNdsDupcKtDuDVpvDwDWpxDyDzDADBDCDDDEDFD^jvpGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1700cdef inline list Device_ensure_tls_devices(cls):
1701 """Ensure thread-local Device singletons exist, creating if needed."""
1702 cdef int total
1703 try: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1704 return _tls.devices 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E
1705 except AttributeError: 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1706 with nogil: 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1707 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1708 devices = _tls.devices = [] 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1709 for dev_id in range(total): 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1710 device = super(Device, cls).__new__(cls) 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1711 device._device_id = dev_id 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1712 device._memory_resource = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1713 device._has_inited = False 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1714 device._properties = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1715 device._resources = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1716 device._uuid = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1717 device._context = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1718 devices.append(device) 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E
1719 return devices 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!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~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E