����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 97.74.90.209  /  Your IP : 216.73.216.74
Web Server : Apache
System : Linux live.indianstaffingfederation.org 4.18.0-553.54.1.el8_10.x86_64 #1 SMP Tue May 27 22:49:52 EDT 2025 x86_64
User : indianstaffing ( 1003)
PHP Version : 8.3.22
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/opt/nydus/ops/mysql/connector/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/opt/nydus/ops/mysql/connector/__pycache__/cursor_cext.cpython-39.pyc
a

Oh#h=��@s�dZddlmZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZddlmZddlmZmZmZmZmZmZmZmZmZdd	l m!Z!m"Z"m#Z#m$Z$dd
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3m4Z4m5Z5m6Z6m7Z7e	�r"dd
l8m9Z9dZ:Gdd�d�Z;Gdd�de$�Z<Gdd�de<�Z=Gdd�de<�Z>Gdd�de=�Z?Gdd�de<�Z@Gdd�de=�ZAGdd�de<�ZBGdd �d e=�ZCGd!d"�d"e<�ZDGd#d$�d$e@eD�ZEGd%d&�d&eBeD�ZFGd'd(�d(eD�ZGdS))z%Cursor classes using the C Extension.�)�annotationsN)�
namedtuple)�
TYPE_CHECKING�Any�Dict�	Generator�Iterator�List�NoReturn�Optional�Sequence�Tuple�Union)�MySQLInterfaceError�)	�CextEofPacketType�CextResultType�DescriptionType�ParamsSequenceOrDictType�ParamsSequenceType�RowItemType�RowType�
StrOrBytes�WarningType)�NAMED_TUPLE_CACHE�CMySQLPrepStmt�MySQLConnectionAbstract�MySQLCursorAbstract)
�RE_PY_PARAM�RE_SQL_COMMENT�RE_SQL_FIND_PARAM�RE_SQL_INSERT_STMT�RE_SQL_INSERT_VALUES�RE_SQL_ON_DUPLICATE� RE_SQL_PYTHON_CAPTURE_PARAM_NAME�RE_SQL_PYTHON_REPLACE_PARAM�is_eol_comment�parse_multi_statement_query)�CR_NO_RESULT_SET)�Error�InterfaceError�NotSupportedError�ProgrammingError�get_mysql_exception)�CMySQLConnectionzNo result set to fetch fromc@sBeZdZdZddd�dd�Zddd	�d
d�Zedd
�dd��ZdS)�_ParamSubstitutorz4
    Substitutes parameters into SQL statement.
    zSequence[bytes]�None)�params�returncCs||_d|_dS)Nr)r1�index)�selfr1�r5�L/opt/nydus/tmp/pip-target-wgfnss67/lib/python/mysql/connector/cursor_cext.py�__init__msz_ParamSubstitutor.__init__�object�bytes)�matchobjr2cCsB|j}|jd7_z|j|WSty<td�d�Yn0dS)Nrz+Not enough parameters for the SQL statement)r3r1�
IndexErrorr,)r4r:r3r5r5r6�__call__qs��z_ParamSubstitutor.__call__�int�r2cCst|j�|jS)z8Returns number of parameters remaining to be substituted)�lenr1r3�r4r5r5r6�	remaining{sz_ParamSubstitutor.remainingN)�__name__�
__module__�__qualname__�__doc__r7r<�propertyrAr5r5r5r6r/hs

r/cs�eZdZUdZdZded<dZded<dZded<ddd	�d
d�Zd]ddd
��fdd�
Z	dd�dd�Z
dd�dd�Zdd�dd�Zddd�dd�Z
dd�dd�Zdd�dd�Zd d�d!d"�Zd^d$d%dd&d'�d(d)�Zd*d+d,d-�d.d/�Zd*d+d&d-�d0d1�Zed2d�d3d4��Zed5d�d6d7��Zdd�d8d9�Zd_d*d:d;d<�d=d>�Zd?d�d@dA�ZdBd�dCdD�Zd`d5dBdF�dGdH�ZdId�dJdK�ZdLd�dMdN�Zd d�dOdP�ZdQd�dRdS�ZedTd�dUdV��Z ed*d�dWdX��Z!edd�dYdZ��Z"d*d�d[d\�Z#�Z$S)a�CMySQLCursorz;Default cursor for interacting with MySQL using C ExtensionF�bool�_raw�	_buffered�_raw_as_stringr.r0)�
connectionr2cCs@t�|�d|_d|_d|_t|t�s0tdd��t�	|�|_
dS)�
Initialize����NNi��errnoN)rr7�_affected_rows�	_rowcount�_nextrow�
isinstancerr*�weakref�proxy�_cnx�r4rLr5r5r6r7�s


zCMySQLCursor.__init__T��freer2cs^d|_d|_d|_d|_d|_d|_d|_d|_d|_g|_|rP|jrP|j�	�t
���dS)zXReset the cursor

        When free is True (default) the result will be freed.
        rNNr)rSrTrR�_last_insert_id�_warning_count�	_warnings�_descriptionZ_executed_listrX�free_result�super�reset�r4r[��	__class__r5r6rb�s

zCMySQLCursor.resetr>cCs|jdurtt��dS)zsCheck if the statement has been executed.

        Raises an error if the statement has not been executed.
        N)�	_executedr*�ERR_NO_RESULT_TO_FETCHr@r5r5r6�_check_executed�s
zCMySQLCursor._check_executedzOptional[List[WarningType]]c
Cs�g}z2|j��|j�d�}|j��d}|j��Wnltyp}z"t|j|j|jd�|�WYd}~n<d}~0t	y�}zt
d|���d�WYd}~n
d}~00|r�|SdS)aFetch warnings

        Fetch warnings doing a SHOW WARNINGS. Can be called after getting
        the result.

        Returns a result set or None when there were no warnings.

        Raises Error (or subclass) on errors.

        Returns list of tuples or None.
        z
SHOW WARNINGSr��msgrQ�sqlstateNzFailed getting warnings; )rXZconsume_results�	cmd_query�get_rowsrr-rjrQrk�	Exceptionr*)r4Zwarns�_�errr5r5r6�_fetch_warnings�s"
��&zCMySQLCursor._fetch_warningscCsf|jjr|jr|��|_|js"dSt|jddd�d|jji�}|jjrP|�tjt	|�dd�dS)z�Handle possible warnings after all results are consumed.

        Raises:
            Error: Also raises exceptions if raise_on_warnings is set.
        Nrr��warning�)�
stacklevel)
rXZget_warningsr]rqr^r-Zraise_on_warnings�warnings�warn�str)r4rpr5r5r6�_handle_warnings�s
��zCMySQLCursor._handle_warningsz(Union[CextEofPacketType, CextResultType])�resultr2cCsRd|vr"|d|_d|_|��n,|d|_|d|_|d|_d|_|��dS)z,Handles the result after statement execution�columnsrZ	insert_id�
warning_countZ
affected_rowsrNN)r_rS�_handle_resultsetr\r]rRry�r4rzr5r5r6�_handle_result�s




zCMySQLCursor._handle_resultcCsdS)�Handle a result setNr5r@r5r5r6r}�szCMySQLCursor._handle_resultsetcCs(|jj|_|��|jjs$|j��dS)zMHandle end of reading the result

        Raises an Error on errors.
        N)rXr|r]ry�more_resultsr`r@r5r5r6�_handle_eof�s
zCMySQLCursor._handle_eofz#Generator[CMySQLCursor, None, None]c
cs�t|jd�}d|_d}d}zV|���d�r.|s>|r:|��nd}|jj}t|�rRWq|��|_|V|�	�snt
�Wqty�}z|jt
kr��WYd}~qd}~0t
y�YdS0qdS)aY	Generator returns MySQLCursor objects for multiple statements.

        This method is only used when multiple statements are executed
        by the `cursor.execute(multi_stmt_query, multi=True)` method.

        How does this method work? To properly map each statement (stmt) to a result,
        the following facts must be considered:

        1. Read operations such as `SELECT` produce a non-empty result
            (calling `next(query_iter)` gets a result that includes at least one column).
        2. Write operatios such as `INSERT` produce an empty result
            (calling `next(query_iter)` gets a result with no columns - aka empty).
        3. End-of-line (EOL) comments do not produce a result, unless is the last stmt
            in which case produces an empty result.
        4. Calling procedures such as `CALL my_proc` produce a sequence `(1)*0` which
            means it may produce zero or more non-empty results followed by just one
            empty result. In other words, a callproc stmt always terminates with an
            empty result. E.g., `my_proc` includes an update + select + select + update,
            then the result sequence will be `110` - note how the write ops results get
            annulated, just the read ops results are produced. Other examples:
                * insert + insert -> 0
                * select + select + insert + select -> 1110
                * select -> 10
            Observe how 0 indicates the end of the result sequence. This property is
            vital to know what result corresponds to what callproc stmt.

        In this regard, the implementation is composed of:
        1. Parsing: the multi-statement is broken down into single statements, and then
            for each of these, leading white spaces are removed (including
            jumping line, vertical line, tab, etc.). Also, EOL comments are removed from
            the stream, except when the comment is the last statement of the
            multi-statement string.
        2. Mapping: the facts described above as used as "game rules" to properly match
        statements and results. In case, if we run out of statements before running out
        of results we use a sentinel named "stmt_overflow!" to indicate that the mapping
        went wrong.

        Acronyms
            1: a non-empty result
            2: an empty result
        )Z
multi_stmtN�FsCALLsstmt_overflow!)r'rf�upper�
startswith�popleftrX�result_set_availabler&�rstrip�nextset�
StopIterationr*rQr()r4Z
executed_list�stmtrzrpr5r5r6�
_execute_iter�s(*�

zCMySQLCursor._execute_iterr5rrz-Optional[Generator[CMySQLCursor, None, None]]��	operationr1�multir2c
Cs�|sdSz|jr|j��rt�Wn4ttfyT}ztdd�|�WYd}~n
d}~00|j��d}|��z"t|t�r�|�|jj	�}n|}Wn6t
tfy�}ztt|��|�WYd}~n
d}~00|�rH|j�|�}t|t
��r|��D] \}}|�d|�d���|�}q�n8t|ttf��rHt|�}	t�|	|�}|	jdk�rHtd��z|jj||j|j|jd	�}
Wn<t�y�}z"t|j|j|jd
�|�WYd}~n
d}~00||_|� |
�|�r�|�!�SdS)z�Execute given statement using given parameters

        Deprecated: The multi argument is not needed and nextset() should
        be used to handle multiple result sets.
        N�Cursor is not connected�r��%(�)sr�1Not all parameters were used in the SQL statement)�rawZbuffered�
raw_as_stringri)"rX�	is_closedr,�ReferenceError�handle_unread_resultrbrUrx�encode�python_charset�UnicodeDecodeError�UnicodeEncodeError�prepare_for_mysql�dict�items�replace�list�tupler/r�subrArlrIrJrKrr-rjrQrkrfrr�)r4r�r1r�rpr��prepared�key�value�psubrzr5r5r6�executeFs\"

$��
��
zCMySQLCursor.executerxz"Sequence[ParamsSequenceOrDictType]zOptional[bytes]�r��
seq_paramsr2c
Cs�ddd�dd�}t�tdt�t||��}t�t|�}|s@td��|�d��|j	j
�}g}z�|�|j	j
�}|D]�}	|}|j	�|	�}
t|
t
�r�|
��D] \}}|�d	|�d
���|�}q�n4t|
ttf�r�t|
�}
t�|
|�}|
jdkr�td��|�|�ql||v�r |�|d
�|�d�}||_|WSWdSttf�y\}ztt|��|�WYd}~n>d}~0t�y�}ztd|���d�WYd}~n
d}~00dS)zImplements multi row insertzre.Matchrx)�matchr2cSs|�d�rdS|�d�S)aRemove comments from INSERT statements.

            This function is used while removing comments from INSERT
            statements. If the matched string is a comment not enclosed
            by quotes, it returns an empty string, else the string itself.
            r��)�group)r�r5r5r6�remove_comments�s
z3CMySQLCursor._batch_insert.<locals>.remove_commentsr�zAFailed rewriting statement for multi-row INSERT. Check SQL syntaxrr�r�rr��,N� Failed executing the operation; )�rer�r#r�searchr"r*r�r�rXr�r�rUr�r�r�r�r�r/rrAr,�append�joinrfr�r�rxrn)r4r�r�r��tmp�matches�fmt�valuesr�r1r�r�r�r�rpr5r5r6�
_batch_insert�sP��
�
�
"zCMySQLCursor._batch_insertc
Cs<|r|sdSz|jst�Wn2ttfyL}ztd�|�WYd}~n
d}~00|j��t|ttf�sntd��t�t	|�r�|s�d|_
dS|�||�}|dur�||_|�
|�Sd}zF|D]<}|�
||�|jr�|jjr�|��||jr�|j
n|j7}q�Wn:ttf�y0}ztd|���d�WYd}~n
d}~00||_
dS)a�Execute the given operation multiple times

        The executemany() method will execute the operation iterating
        over the list of parameters in seq_params.

        Example: Inserting 3 new employees and their phone number

        data = [
            ('Jane','555-001'),
            ('Joe', '555-001'),
            ('John', '555-003')
            ]
        stmt = "INSERT INTO employees (name, phone) VALUES ('%s','%s)"
        cursor.executemany(stmt, data)

        INSERT statements are optimized by batching the data, that is
        using the MySQL multiple rows syntax.

        Results are discarded! If they are needed, consider looping over
        data using the execute() method.
        Nr�z+Parameters for query must be list or tuple.rr�)rXr,r�r�rUr�r�r�r�r!rSr�rfr��	with_rows�
unread_result�fetchall�descriptionrR�
ValueError�	TypeErrorr*)r4r�r�rpr��rowcntr1r5r5r6�executemany�s: 

&zCMySQLCursor.executemanyzOptional[List[DescriptionType]]cCs|jS)z*Returns description of columns in a result)r_r@r5r5r6r�szCMySQLCursor.descriptionr=cCs|jdkr|jS|jS)z/Returns the number of rows produced or affectedrN)rSrRr@r5r5r6�rowcounts
zCMySQLCursor.rowcountcCs$|js
dS|j��d|_d|_dS)z<Close the cursor

        The result will be freed.
        FNT)rXr�r^r@r5r5r6�closes
zCMySQLCursor.closerz0Optional[Union[Dict[str, RowItemType], RowType]]��procname�argsr2c
Csl|rt|t�std��t|ttf�s,td��d}g|_�z�g}g}|�d�d}|r�g}t|�D]n\}}	|j||dd�}
|�	|
�t|	t�r�|�	d|
�d	|	d�d
��|�	|	d�q`|�	|
�|�	|	�q`d�
d
d�|D��}|�d|��|�d|�dd�
|��d
�}|jj
||j|jd�}
g}|jj�r�|j��}
t|ttf��rRt}n(t|ttf��rht}n|j�rvt}nt}||j���}d|�d
�|_|�|
�|�	|�|j���q(||_|��|�r|��dd�t|dd�|D��D�}dd�
|���}|�|�|��WSt�WSt �y2�Yn6t!�yf}zt"d|���d�WYd}~n
d}~00dS)z1Calls a stored procedure with the given argumentszprocname must be a stringzargs must be a sequencez@_{name}_arg{index}�.rNr)�namer3z CAST(� AS �)r�,css|]}|�d�VqdS)z=%sNr5��.0�argr5r5r6�	<genexpr>Cr�z(CMySQLCursor.callproc.<locals>.<genexpr>zSET zCALL �()r�r�z
(a result of cSsg|]\}}|�d|���qS)r�r5)r�r��aliasr5r5r6�
<listcomp>gs�z)CMySQLCursor.callproc.<locals>.<listcomp>cSsg|]}|�d��qS)z@_)�lstripr�r5r5r6r�jr�zSELECT zFailed calling stored routine; N)#rUrxr�r�r��_stored_results�split�	enumerate�formatr�r�r�rXrlrIrKr��fetch_eof_columns�CMySQLCursorDict�CMySQLCursorBufferedDict�CMySQLCursorNamedTuple�CMySQLCursorBufferedNamedTuple�CMySQLCursorBufferedRaw�CMySQLCursorBufferedZget_selfrfr�next_resultr�rb�zip�fetchoner)rnr*)r4r�r�Zargfmt�argnames�argtypesZprocname_absZ	argvalues�idxr��argnameZplaceholders�callrz�resultsZcursor_class�cur�selectrpr5r5r6�callproc sz



�

�

��

zCMySQLCursor.callproczOptional[bool]cCs`|j��s|jdd�dS|jdd�|jjsL|j��}|�|�ttd��|�|j���dS)z%Skip to the next available result setT�r[NFrP)	rXr�rbr�Zfetch_eof_statusrr*r(r�)r4�eofr5r5r6r�xs



zCMySQLCursor.nextset�
List[RowType]cCs~|��|jjsgS|j��}|jrD|jdrD|d�d|jd�|dsX|��gS|jt|d�7_|��|dS)��Return all rows of a query result set.

        Returns:
            list: A list of tuples with all rows of a query result set.
        r)	rhrXr�rmrT�insertr�rSr?�r4�rowsr5r5r6r��s
zCMySQLCursor.fetchallr��sizer2cCs�|��|jr.|jdr.|jdg}|d8}ng}|rT|jjrT|�|j�|�d�|r�|jjr�|j��|_|jr�|jds�|jjs�|j��nd|_|s�|�	�gS|j
t|�7_
|S)�<Return the next set of rows of a query result set.

        When no more rows are available, it returns an empty list.
        The number of rows returned can be specified using the size argument,
        which defaults to one.

        Returns:
            list: The next set of rows of a query result set.
        rrrO)rhrTrXr��extendrm�get_rowr�r`r�rSr?)r4r�r�r5r5r6�	fetchmany�s.

���zCMySQLCursor.fetchmany�Optional[RowType]cCs||��|j}|s$|jjr$|j��}|rZ|drZ|j��|_|jdsf|jjsf|j��n|��dS|jd7_|dS)�yReturn next row of a query result set.

        Returns:
            tuple or None: A row from query result set.
        rNr)	rhrTrXr�r�r�r`r�rS�r4�rowr5r5r6r��s
zCMySQLCursor.fetchonezIterator[RowType]cCst|jd�S)z�Iteration over the result set

        Iteration over the result set which calls self.fetchone()
        and returns the next row.
        N)�iterr�r@r5r5r6�__iter__�szCMySQLCursor.__iter__ccs|jD]
}|Vqg|_dS)z�Returns an iterator for stored results

        This method returns an iterator over results which are stored when
        callproc() is called. The iterator will provide MySQLCursorBuffered
        instances.

        Returns a iterator.
        N)r�r~r5r5r6�stored_results�s

zCMySQLCursor.stored_resultsrcCs4z|��}Wnty$td�Yn0|s0td�|S)z�Iteration over the result set
        Used for iterating over the result set. Calls self.fetchone()
        to get the next row.

        Raises StopIteration when no more rows are available.
        N)r�r*r�r�r5r5r6�__next__�szCMySQLCursor.__next__zTuple[str, ...]cCs|js
dStdd�|jD��S)ztReturns column names

        This property returns the columns names as a tuple.

        Returns a tuple.
        r5css|]}|dVqdS)rNr5)r��dr5r5r6r�	r�z,CMySQLCursor.column_names.<locals>.<genexpr>)r�r�r@r5r5r6�column_names�szCMySQLCursor.column_namescCs4z|j���d�WSty.|j��YS0dS)z�Returns the executed statement

        This property returns the executed statement. When multiple
        statements were executed, the current statement in the iterator
        will be returned.
        �utf8N)rf�strip�decode�AttributeErrorr@r5r5r6�	statementszCMySQLCursor.statementcCs|jr
dSdS)z�Returns whether the cursor could have rows returned

        This property returns True when column descriptions are available
        and possibly also rows, which will need to be fetched.

        Returns True or False.
        TF)r�r@r5r5r6r�s	zCMySQLCursor.with_rowscCshd}|jrRz|j�d�}Wnty2|j}Yn0t|�dkrV|dd�d}nd}|j|jj|d�S)Nz{class_name}: {stmt}zutf-8�(z..z(Nothing executed yet))�
class_namer�)rfrrr?r�rerB)r4r�Zexecutedr5r5r6�__str__%szCMySQLCursor.__str__)T)r5F)r5)r)%rBrCrDrErI�__annotations__rJrKr7rbrhrqryrr}r�r�r�r�r�rFr�r�r�r�r�r�r�r�r�rrrrr�r�
__classcell__r5r5rdr6rG�sN


J�A=C�X'rGcs�eZdZdZdd��fdd�Zdd�dd	�Zdddd��fd
d�
Zdd�dd�Zdd�dd�Zdddd�dd�Z	dd�dd�Z
edd�dd��Z�Z
S) r�z*Cursor using C Extension buffering resultsr.�rLcst��|�d|_d|_dS)rMNr)rar7�_rows�	_next_rowrYrdr5r6r77szCMySQLCursorBuffered.__init__r0r>cCs.|j��d|_d|_t|j�|_|��dS)r�rN)rXrmrrr?rSr�r@r5r5r6r}>sz&CMySQLCursorBuffered._handle_resultsetTrHrZcsd|_d|_t�j|d�dS)zReset the cursor to defaultNrr�)rrrarbrcrdr5r6rbEszCMySQLCursorBuffered.resetr�cCs<d}z|j|j}Wnty(YdS0|jd7_|S)�QReturns the next row in the result set

        Returns a tuple or None.
        Nr)rrr;r�r5r5r6�
_fetch_rowKszCMySQLCursorBuffered._fetch_rowr�cCs(|��|j|jd�}t|j�|_|S)r�N)rhrrr?�r4�resr5r5r6r�XszCMySQLCursorBuffered.fetchallrr=r�cCsF|��g}|p|j}|dkrB|d8}|��}|rB|�|�qqBq|S�r�rr)rh�	arraysizerr��r4r�rZcntr�r5r5r6r�cs

zCMySQLCursorBuffered.fetchmanycCs|��|��S)r��rhrr@r5r5r6r�yszCMySQLCursorBuffered.fetchonecCs
|jduS)z�Returns whether the cursor could have rows returned

        This property returns True when rows are available,
        which will need to be fetched.

        Returns True or False.
        N)rr@r5r5r6r��s	zCMySQLCursorBuffered.with_rows)T)r)rBrCrDrEr7r}rbrr�r�r�rFr�r
r5r5rdr6r�4s
	r�c@seZdZUdZdZded<dS)�CMySQLCursorRawz+Cursor using C Extension return raw resultsTrHrIN�rBrCrDrErIrr5r5r5r6r�s
rc@seZdZUdZdZded<dS)r�z.Cursor using C Extension buffering raw resultsTrHrINrr5r5r5r6r��s
r�cs\eZdZUdZdZded<dd��fdd�Zdd
dd��fd
d�
Zdd��fdd�Z�Z	S)r�z7Cursor using C Extension returning rows as dictionariesFrHrI� Optional[Dict[str, RowItemType]]r>cs"t���}|rtt|j|��SdS)zyReturn next row of a query result set.

        Returns:
            dict or None: A dict from query result set.
        N)rar�r�r�rr�rdr5r6r��s
zCMySQLCursorDict.fetchonerr=�List[Dict[str, RowItemType]]r�cs t�j|d�}�fdd�|D�S)a�Return the next set of rows of a query result set.

        When no more rows are available, it returns an empty list.
        The number of rows returned can be specified using the size argument,
        which defaults to one.

        Returns:
            list: The next set of rows of a query result set represented
                  as a list of dictionaries where column names are used as keys.
        �r�csg|]}tt�j|���qSr5�r�r�r�r�r�r@r5r6r��r�z.CMySQLCursorDict.fetchmany.<locals>.<listcomp>�rar��r4r�rrdr@r6r��szCMySQLCursorDict.fetchmanycst���}�fdd�|D�S)z�Return all rows of a query result set.

        Returns:
            list: A list of dictionaries with all rows of a query
                  result set where column names are used as keys.
        csg|]}tt�j|���qSr5rrr@r5r6r��r�z-CMySQLCursorDict.fetchall.<locals>.<listcomp>�rar�rrdr@r6r��s
zCMySQLCursorDict.fetchall)r)
rBrCrDrErIrr�r�r�r
r5r5rdr6r��s

	r�cs<eZdZdZdZdd��fdd�Zdd��fdd	�Z�ZS)
r�zECursor using C Extension buffering and returning rows as dictionariesFrr>cs"t���}|rtt|j|��SdS�N)rarr�r�rr�rdr5r6r�s
z#CMySQLCursorBufferedDict._fetch_rowrcst���}�fdd�|D�S)r�csg|]}tt�j|���qSr5rrr@r5r6r��r�z5CMySQLCursorBufferedDict.fetchall.<locals>.<listcomp>r"rrdr@r6r��s
z!CMySQLCursorBufferedDict.fetchall)rBrCrDrErIrr�r
r5r5rdr6r��sr�csneZdZUdZdZded<dd��fdd�Zd	d��fd
d�Zdd
dd��fdd�
Zdd��fdd�Z	�Z
S)r�z7Cursor using C Extension returning rows as named tuplesNr�named_tupler0r>csPt���t|j�}zt||_Wn(tyJtd|�|_|jt|<Yn0dS)r��RowN)rar}r�rrr$�KeyErrorr)r4r{rdr5r6r}�s

z(CMySQLCursorNamedTuple._handle_resultsetr�cst���}|r|j|�SdS�r�N)rar�r$r�rdr5r6r��s

zCMySQLCursorNamedTuple.fetchonerr=r�r�cs(t�j|d�}|sgS�fdd�|D�S)r�rcsg|]}�j|��qSr5�r$rr@r5r6r��r�z4CMySQLCursorNamedTuple.fetchmany.<locals>.<listcomp>r r!rdr@r6r��s
z CMySQLCursorNamedTuple.fetchmanycst���}�fdd�|D�S)r�csg|]}�j|��qSr5r(rr@r5r6r�r�z3CMySQLCursorNamedTuple.fetchall.<locals>.<listcomp>r"rrdr@r6r��s
zCMySQLCursorNamedTuple.fetchall)r)rBrCrDrEr$rr}r�r�r�r
r5r5rdr6r��s

r�csXeZdZUdZdZded<dd��fdd�Zd	d��fd
d�Zdd��fd
d�Z�Z	S)r�zECursor using C Extension buffering and returning rows as named tuplesNrr$r0r>cst���td|j�|_dS)Nr%)rar}rrr$r@rdr5r6r}s
z0CMySQLCursorBufferedNamedTuple._handle_resultsetr�cst���}|r|j|�SdSr#)rarr$r�rdr5r6rs

z)CMySQLCursorBufferedNamedTuple._fetch_rowr�cst���}�fdd�|D�S)r�csg|]}�j|��qSr5r(rr@r5r6r�r�z;CMySQLCursorBufferedNamedTuple.fetchall.<locals>.<listcomp>r"rrdr@r6r�s
z'CMySQLCursorBufferedNamedTuple.fetchall)
rBrCrDrEr$rr}rr�r
r5r5rdr6r�	s

r�cs�eZdZdZdd��fdd�Zdd�dd	�Zd/ddd
�dd�Zd0dddd�dd�Zdd��fdd�Zd1ddd��fdd�
Z	d2ddddd�dd �Z
d!d"dd#�d$d%�Zdd�d&d'�Zd3d(d)d*�d+d,�Z
d)d�d-d.�Z�ZS)4�CMySQLCursorPreparedz&Cursor using MySQL Prepared Statementsr.rcs.t��|�d|_d|_d|_d|_d|_dS)NrT)rar7rrSr�_binary�_stmtrYrdr5r6r7%szCMySQLCursorPrepared.__init__r0r>cCsd|_|��dS)zHandle EOF packetrON)rTryr@r5r5r6r�-sz CMySQLCursorPrepared._handle_eofFrHr�)r�r2cCs�|jr|jjsdSd}|jdkr@|jj|j|j||jd�\}}n
|j\}}|r�|jj|j|j||jd�|_|jd}|dur�|d|_|��|j	dkr�d|_	n|j	d7_	|r�|d|_|��|S)rNrO)�binaryr{r��	prep_stmtrr|rN)
r+�have_result_setrTrXr�r*r�r]r�rS)r4r�r�r�r5r5r6r2s:
�
�



zCMySQLCursorPrepared._fetch_rowNrr
r�cCs
t��dS)zRCalls a stored procedue

        Not supported with CMySQLCursorPrepared.
        N)r+)r4r�r�r5r5r6r�ZszCMySQLCursorPrepared.callproccs0|jr"|��|j�|j�d|_t���dS)zzClose the cursor

        This method will try to deallocate the prepared statement and close
        the cursor.
        N)r+rbrX�cmd_stmt_closerar�r@rdr5r6r�as
zCMySQLCursorPrepared.closeTrZcs&|jr|j�|j�t�j|d�dS)zResets the prepared statement.r�N)r+rX�cmd_stmt_resetrarbrcrdr5r6rbmszCMySQLCursorPrepared.resetrz"Optional[ParamsSequenceOrDictType]r�c
s�|sdSz|jr|j��rt�Wn4ttfyT}ztdd�|�WYd}~n
d}~00|jjdd�|jj}|dkrxd}t|t�s�z|�|�}Wn2t	y�}ztt|��|�WYd}~n
d}~00t�t
��r6t�t
|�}zt�fdd	�|D���Wn0t�y&}ztd
�|�WYd}~n
d}~00t�td|�}||ju�r�|j�rX|j�|j�||_z|�|�}Wn4t�y�}ztt|��|�WYd}~n
d}~00d|v�r�t�td
|�}z|j�|�|_Wn"t�y�d|_d|_�Yn0|j�|j�|jjdk�r��sdS��rjt�ttf��sLtddt��j�d��d�d��|jjt��k�rjtddd���du�rxd�|jj |jg��R�}|�r�|�!|�dS)a)Prepare and execute a MySQL Prepared Statement

        This method will prepare the given operation and execute it using
        the given parameters.

        If the cursor instance already had a prepared statement, it is
        first closed.

        Note: argument "multi" is unused.
        Nr�r�T)r�Zutf8mb4rc3s|]}�|VqdSr#r5)r�r��r1r5r6r��r�z/CMySQLCursorPrepared.execute.<locals>.<genexpr>z6Not all placeholders were found in the parameters dict�?s%s�?ri�zIncorrect type of argument: r�zP), it must be of type tuple or list the argument given to the prepared statement)rQrjz:Incorrect number of arguments executing prepared statementr5)"rXr�r,r�r��charsetrUrxrr�r�r��findallr$r�r&r�r%rfr+r/r�r�r Zcmd_stmt_preparer)r0Zparam_countr��typerBr?Zcmd_stmt_executer)r4r�r1r�rpr4Zreplacement_keysrr5r1r6r�ss|"
$��$
��
zCMySQLCursorPrepared.executerxzSequence[ParamsSequenceType]r�c
Cszd}z2|D](}|�||�|jr(|��||j7}q
Wn8ttfyn}ztd|���|�WYd}~n
d}~00||_dS)aPrepare and execute a MySQL Prepared Statement many times

        This method will prepare the given operation and execute with each
        tuple found the list seq_params.

        If the cursor instance already had a prepared statement, it is
        first closed.
        rr�N)r�r�r�rSr�r�r*)r4r�r�r�r1rpr5r5r6r��s&z CMySQLCursorPrepared.executemanycCs|��|��pdSr'rr@r5r5r6r��szCMySQLCursorPrepared.fetchonez
Optional[int]r�r�cCsJ|��g}|p|j}|dkrF|jjrF|d8}|��}|r|�|�q|Sr)rhrr+r.rr�rr5r5r6r��s

zCMySQLCursorPrepared.fetchmanycCs�|��|jjsgS|jj|jd�}|jrJ|jdrJ|d�d|jd�|ds^|��gS|jt	|d�7_|��|dS)r�)r-r)
rhr+r.rXrmrTr�r�rSr?r�r5r5r6r�szCMySQLCursorPrepared.fetchall)F)N)T)NF)N)rBrCrDrEr7r�rr�r�rbr�r�r�r�r�r
r5r5rdr6r)"s(	�^	r)c@seZdZdZdS)�CMySQLCursorPreparedDicta�This class is a blend of features from CMySQLCursorDict and CMySQLCursorPrepared

    Multiple inheritance in python is allowed but care must be taken
    when assuming methods resolution. In the case of multiple
    inheritance, a given attribute is first searched in the current
    class if it's not found then it's searched in the parent classes.
    The parent classes are searched in a left-right fashion and each
    class is searched once.
    Based on python's attribute resolution, in this case, attributes
    are searched as follows:
    1. CMySQLCursorPreparedDict (current class)
    2. CMySQLCursorDict (left parent class)
    3. CMySQLCursorPrepared (right parent class)
    4. CMySQLCursor (base class)
    N�rBrCrDrEr5r5r5r6r7sr7c@seZdZdZdS)�CMySQLCursorPreparedNamedTuplezVThis class is a blend of features from CMySQLCursorNamedTuple and CMySQLCursorPreparedNr8r5r5r5r6r9-sr9c@seZdZUdZdZded<dS)�CMySQLCursorPreparedRawzOThis class is a blend of features from CMySQLCursorRaw and CMySQLCursorPreparedTrHrINrr5r5r5r6r:1s
r:)HrE�
__future__rr�rvrV�collectionsr�typingrrrrrr	r
rrr
rZ_mysql_connectorr�typesrrrrrrrrrZ	abstractsrrrr�cursorrrr r!r"r#r$r%r&r'�	errorcoder(�errorsr)r*r+r,r-Zconnection_cextr.rgr/rGr�rr�r�r�r�r�r)r7r9r:r5r5r5r6�<module>sD4,08Z'3z

Youez - 2016 - github.com/yon3zu
LinuXploit