ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ zfc@sdZdddddddgZdd lZdefd YZid Zd Zd ZdZ d dZ de fdYZ eaeadZd S(s,Drop-in replacement for the thread module. Meant to be used as a brain-dead substitute so that threaded code does not need to be rewritten for when the thread module is not present. Suggested usage is:: try: import thread except ImportError: import dummy_thread as thread terrortstart_new_threadtexitt get_identt allocate_locktinterrupt_maintLockTypeiNcBseZdZdZRS(s%Dummy implementation of thread.error.cGs ||_dS(N(targs(tselfR((s$/usr/lib64/python2.7/dummy_thread.pyt__init__s(t__name__t __module__t__doc__R (((s$/usr/lib64/python2.7/dummy_thread.pyRscCst|ttkr*tdnt|ttkrTtdntay|||Wn!tk r~ntjnXt at rta t ndS(sDummy implementation of thread.start_new_thread(). Compatibility is maintained by making sure that ``args`` is a tuple and ``kwargs`` is a dictionary. If an exception is raised and it is SystemExit (which can be done by thread.exit()) it is caught and nothing is done; all other exceptions are printed out by using traceback.print_exc(). If the executed function calls interrupt_main the KeyboardInterrupt will be raised when the function returns. s2nd arg must be a tuples3rd arg must be a dictN( ttypettuplet TypeErrortdicttFalset_maint SystemExitt _tracebackt print_exctTruet _interrupttKeyboardInterrupt(tfunctionRtkwargs((s$/usr/lib64/python2.7/dummy_thread.pyRs  cCs tdS(s&Dummy implementation of thread.exit().N(R(((s$/usr/lib64/python2.7/dummy_thread.pyR:scCsdS(sDummy implementation of thread.get_ident(). Since this module should only be used when threadmodule is not available, it is safe to assume that the current process is the only thread. Thus a constant can be safely returned. i((((s$/usr/lib64/python2.7/dummy_thread.pyR>scCstS(s/Dummy implementation of thread.allocate_lock().(R(((s$/usr/lib64/python2.7/dummy_thread.pyRGscCs|dk rtdndS(s,Dummy implementation of thread.stack_size().s'setting thread stack size not supportediN(tNoneR(tsize((s$/usr/lib64/python2.7/dummy_thread.pyt stack_sizeKs cBsDeZdZdZddZeZdZdZdZ RS(sClass implementing dummy implementation of thread.LockType. Compatibility is maintained by maintaining self.locked_status which is a boolean that stores the state of the lock. Pickling of the lock, though, should not be done since if the thread module is then used with an unpickled ``lock()`` from here problems could occur from this class not having atomic methods. cCs t|_dS(N(Rt locked_status(R((s$/usr/lib64/python2.7/dummy_thread.pyR \scCs=|dks|rt|_tS|js5t|_tStSdS(sDummy implementation of acquire(). For blocking calls, self.locked_status is automatically set to True and returned appropriately based on value of ``waitflag``. If it is non-blocking, then the value is actually checked and not set if it is already acquired. This is all done so that threading.Condition's assert statements aren't triggered and throw a little fit. N(RRRR(Rtwaitflag((s$/usr/lib64/python2.7/dummy_thread.pytacquire_s    cCs|jdS(N(trelease(Rttyptvalttb((s$/usr/lib64/python2.7/dummy_thread.pyt__exit__vscCs|jstnt|_tS(sRelease the dummy lock.(RRRR(R((s$/usr/lib64/python2.7/dummy_thread.pyR!ys   cCs|jS(N(R(R((s$/usr/lib64/python2.7/dummy_thread.pytlockedsN( R R R R RR t __enter__R%R!R&(((s$/usr/lib64/python2.7/dummy_thread.pyRQs     cCstrtntadS(s^Set _interrupt flag to True to have start_new_thread raise KeyboardInterrupt upon exiting.N(RRRR(((s$/usr/lib64/python2.7/dummy_thread.pyRs (R t__all__t tracebackRt ExceptionRRRRRRRtobjectRRRRRR(((s$/usr/lib64/python2.7/dummy_thread.pyt s      5