34 lines
11 KiB
Markdown
34 lines
11 KiB
Markdown
# Ejemplos de fork() con python
|
|
|
|
```python
|
|
# fork solo funciona en unix/macos
|
|
import os
|
|
|
|
|
|
def padre():
|
|
while True:
|
|
newpid = os.fork()
|
|
if newpid == 0:
|
|
hijo()
|
|
else:
|
|
pids = (os.getpid(), newpid)
|
|
print("Padre: %d, Hijo: %d\n" % pids)
|
|
reply = input("Pulsa 's' si quieres crear un nuevo proceso")
|
|
if reply != 's':
|
|
break
|
|
|
|
def hijo():
|
|
print('\n>>>>>>>>>> Nuevo hijo creado con el pid %d a punto de finalizar<<<<<' % os.getpid())
|
|
os._exit(0)
|
|
|
|
padre()
|
|
```
|
|
> **fork** solo funciona en unix/macos {.is-warning}
|
|
<center>
|
|
|
|
|
|
```diagram
|
|
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIzOTVweCIgaGVpZ2h0PSIyMzFweCIgdmlld0JveD0iLTAuNSAtMC41IDM5NSAyMzEiIGNvbnRlbnQ9IiZsdDtteGZpbGUgaG9zdD0mcXVvdDtlbWJlZC5kaWFncmFtcy5uZXQmcXVvdDsgYWdlbnQ9JnF1b3Q7TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE9QUi8xMTMuMC4wLjAmcXVvdDsgdmVyc2lvbj0mcXVvdDsyNC43LjcmcXVvdDsmZ3Q7Jmx0O2RpYWdyYW0gaWQ9JnF1b3Q7MlplT1BYMWxLcFJ3MDEzNXkzcUwmcXVvdDsgbmFtZT0mcXVvdDtQw6FnaW5hLTEmcXVvdDsmZ3Q7N1ZoTGM2TTRFUDQxcmtvT1RnRXlHQjlqWjJiM01MdXpWVG5zNURRbFFHRE5DTVFJK2JXL2ZsdElnTEF4Y2NaSjVyQjdRbXIxUy9vK2RjdWVvRlcrLzAzZ2N2MEhUd2liZUU2eW42Q0hpZWU1S0hUZ295UUhMUWs5SThnRVRZeFNKM2lrL3hBamJOUTJOQ0ZWVDFGeXppUXQrOEtZRndXSlpVK0doZUM3dmxyS1dUOXFpVE55SW5pTU1UdVYvazBUdVc1Mk1lL2t2eE9hclp2SWJyRFFLemx1bE0xT3FqVk8rTTRTb1E4VHRCS2NTejNLOXl2QzFPRTE1Nkx0UHA1WmJSTVRwSkNYR0hqYVlJdlp4dXh0NGdVTVRKY3BCdytRb0R5WVhRYy9OcnhabUZZMUp2ZWc0TTVLd0hYWnJjTW9VOThTSjRMYzNEYitJQWZ0VXErYTdiZmVQVGlKVWcxTHdXTlNBVURMM1pwSzhsamlXSWwzd0NTUXJXWE9ZT2JDTU1MeDkwendUWkY4M2toR0MyTGtLV1ZzeFJrWHRWK1VoakdKWTVCWFV2RHZ4RnFKUW4vbU8yMHVXeUlrMlo4OVI3ZEZCMmhOZUU2a09JQ0tNV2lwYVJnZG1PbXVvNGZiWUw2MnFOSGNCR3dZbWJXZU85QmdZSEFieGhDOUhZWnIrbzJQUUtqRkNkMWVGZVE1UDdHR1RQa1FXWFRqdzEyQ00zRzY3MjN0eE9rSU1UMHk4WHhmNjlvRFkxVm5tZUtjc29NMldQR2k0Z3dBcVJVaERad3I1cGxrVm53aktCR3c4aWZaSFM5cWs1d1h2TkswVlFFVU5hY041aW9BOHN4Qk9EWERwMFpYTFpXQ2pCN1IxWUEyamlCbWNjbGhvMUR2eVZXMXJSNzQ2SGJRTTY4c21tajNldUh1cFRGZGRkZFVyTVZNZjFFNEhQSXIyVk41SnVyTlM2TWFOcm5JQkEzUEJIWE9CSHp1bG9DNEp2aTQ5TDJLWWtxQzRhS1l6QmVSODBwRjBRMzlYbEYwdzRHcU9CK29pc0VyVk1YWjFWVVJ0anAraWFKR2tHTmFXSWhHQXlqL2t0NlhZQkttZ3pBSGNVaWk5SlY2WDcvMWVSZTJQdjhWUVBZSFFENDZXMUlrOStySkI3TVlxbnBGNC81UjFxZElsRC9GZWxWUnZwZ1ZOWDVTOGp2ZnpCNzJsdHJEb1prVWtQVVhlMkpacVdsblZzOGFPNTBxU1U3ZW1rY0hEOXVCcGhPVEhxOGxGaG1SMWlQdUZCNExBSC9rL0FWaFdOSnRQNGtoVUV5RXZ6aXQ3NDlCSDZFKy9ETjBoS3RPM2xqWlQ5RmpSMkhmRVRwK0cra3RuemlxT2RKdSt5TGFCTS9USnQ2SWJjMkttZ2sveGFHT04wODJiY1k1NUw0SGg3ei9PZFIzQk9qaWc2VldLb1hxZk1MdHhwdk81b3luRmJ4TS9XZ1hpNTQ2REhTNlA4disrVHQyUnVoajRBcW9KaURXRlIxU01md1RqZ2pyWHp6TWFGYW9Xd2xzaDBjNVdxcEdSdUdIK3IxWnlHbVNLQjlMUVNCOUhOWCsxTVV4Q0lOemZ6bnhIOFk2b2ZrWHdSaFAyZ1puWDdKZ3RFTTZkOGhmekh1WVRyM3JiazZqd3RPMEl0Zld3L0N0Mm1pL0JMcVhsVUNyNmozWmEyOWRBdEYvdWdRK1R4dVlkbjlNYWZYdTd6MzA0Vjg9Jmx0Oy9kaWFncmFtJmd0OyZsdDsvbXhmaWxlJmd0OyI+PGRlZnMvPjxnPjxnIGRhdGEtY2VsbC1pZD0iMCI+PGcgZGF0YS1jZWxsLWlkPSIxIj48ZyBkYXRhLWNlbGwtaWQ9IjIiPjxnPjxyZWN0IHg9IjE5MCIgeT0iNTAiIHdpZHRoPSIxMjAiIGhlaWdodD0iODAiIGZpbGw9IiNmOGNlY2MiIHN0cm9rZT0iI2I4NTQ1MCIgcG9pbnRlci1ldmVudHM9ImFsbCIvPjxwYXRoIGQ9Ik0gMjAyIDUwIEwgMjAyIDEzMCBNIDI5OCA1MCBMIDI5OCAxMzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I4NTQ1MCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjxnPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0wLjUgLTAuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9Im5vbmUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiB1bnNhZmUgY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHVuc2FmZSBjZW50ZXI7IHdpZHRoOiA5NHB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDkwcHg7IG1hcmdpbi1sZWZ0OiAyMDNweDsiPjxkaXYgZGF0YS1kcmF3aW8tY29sb3JzPSJjb2xvcjogcmdiKDAsIDAsIDApOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IHdoaXRlLXNwYWNlOiBub3JtYWw7IG92ZXJmbG93LXdyYXA6IG5vcm1hbDsiPjxmb250IHN0eWxlPSJmb250LXNpemU6IDE0cHg7Ij5wYWRyZSgpPC9mb250PjwvZGl2PjwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSIyNTAiIHk9Ijk0IiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTJweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cGFkcmUoKTwvdGV4dD48L3N3aXRjaD48L2c+PC9nPjwvZz48ZyBkYXRhLWNlbGwtaWQ9IjMiPjxnPjxyZWN0IHg9IjE2NSIgeT0iMTcwIiB3aWR0aD0iMTcwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZmZlNmNjIiBzdHJva2U9IiNkNzliMDAiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48cGF0aCBkPSJNIDE4MiAxNzAgTCAxODIgMjMwIE0gMzE4IDE3MCBMIDMxOCAyMzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2Q3OWIwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjxnPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0wLjUgLTAuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9Im5vbmUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiB1bnNhZmUgY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHVuc2FmZSBjZW50ZXI7IHdpZHRoOiAxMzRweDsgaGVpZ2h0OiAxcHg7IHBhZGRpbmctdG9wOiAyMDBweDsgbWFyZ2luLWxlZnQ6IDE4M3B4OyI+PGRpdiBkYXRhLWRyYXdpby1jb2xvcnM9ImNvbG9yOiByZ2IoMCwgMCwgMCk7ICIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGZvbnQtc2l6ZTogMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjsgcG9pbnRlci1ldmVudHM6IGFsbDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgb3ZlcmZsb3ctd3JhcDogbm9ybWFsOyI+PGZvbnQgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsiPmhpam8oKTwvZm9udD48ZGl2IHN0eWxlPSJmb250LXNpemU6IDE0cHg7Ij48ZGl2IHN0eWxlPSJjb2xvcjogcmdiKDU5LCA1OSwgNTkpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZvbnQtZmFtaWx5OiBDb25zb2xhcywgJnF1b3Q7Q291cmllciBOZXcmcXVvdDssIG1vbm9zcGFjZTsgbGluZS1oZWlnaHQ6IDMycHg7IHdoaXRlLXNwYWNlOiBwcmU7Ij48Zm9udCBzdHlsZT0iZm9udC1zaXplOiAxNHB4OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMzgsIDEyNywgMTUzKTsiPm9zPC9zcGFuPi48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxMjEsIDk0LCAzOCk7Ij5fZXhpdDwvc3Bhbj4oPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoOSwgMTM0LCA4OCk7Ij4wPC9zcGFuPik8L2ZvbnQ+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjI1MCIgeT0iMjA0IiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTJweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+aGlqbygpLi4uPC90ZXh0Pjwvc3dpdGNoPjwvZz48L2c+PC9nPjxnIGRhdGEtY2VsbC1pZD0iNCI+PGc+PHJlY3QgeD0iMCIgeT0iMTAiIHdpZHRoPSIxMjAiIGhlaWdodD0iNTAiIGZpbGw9IiNkYWU4ZmMiIHN0cm9rZT0iIzZjOGViZiIgcG9pbnRlci1ldmVudHM9ImFsbCIvPjxwYXRoIGQ9Ik0gMTIgMTAgTCAxMiA2MCBNIDEwOCAxMCBMIDEwOCA2MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNmM4ZWJmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48L2c+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuNSAtMC41KSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0ibm9uZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7IHRleHQtYWxpZ246IGxlZnQ7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IHVuc2FmZSBjZW50ZXI7IGp1c3RpZnktY29udGVudDogdW5zYWZlIGNlbnRlcjsgd2lkdGg6IDk0cHg7IGhlaWdodDogMXB4OyBwYWRkaW5nLXRvcDogMzVweDsgbWFyZ2luLWxlZnQ6IDEzcHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgZm9udC1zaXplOiAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yOyBwb2ludGVyLWV2ZW50czogYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBvdmVyZmxvdy13cmFwOiBub3JtYWw7Ij48Zm9udCBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+PGI+bWFpbjwvYj48L2ZvbnQ+PC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjYwIiB5PSIzOSIgZmlsbD0icmdiKDAsIDAsIDApIiBmb250LWZhbWlseT0iJnF1b3Q7SGVsdmV0aWNhJnF1b3Q7IiBmb250LXNpemU9IjEycHgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPm1haW48L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L2c+PGcgZGF0YS1jZWxsLWlkPSI1Ij48Zz48cGF0aCBkPSJNIDEyMCAzNSBMIDE4NC45OSA4Ni4wNyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9InN0cm9rZSIvPjxwYXRoIGQ9Ik0gMTg5LjEyIDg5LjMxIEwgMTgxLjQ1IDg3Ljc0IEwgMTg0Ljk5IDg2LjA3IEwgMTg1Ljc4IDgyLjIzIFoiIGZpbGw9InJnYigwLCAwLCAwKSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9ImFsbCIvPjwvZz48L2c+PGcgZGF0YS1jZWxsLWlkPSI2Ij48Zz48cGF0aCBkPSJNIDI1MCA1MCBRIDIzMCAwIDI4NSAwIFEgMzQwIDAgMzUwIDQwIFEgMzYwIDgwIDMxNi4yNCA4OC43NSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9InN0cm9rZSIvPjxwYXRoIGQ9Ik0gMzExLjEgODkuNzggTCAzMTcuMjcgODQuOTggTCAzMTYuMjQgODguNzUgTCAzMTguNjUgOTEuODQgWiIgZmlsbD0icmdiKDAsIDAsIDApIiBzdHJva2U9InJnYigwLCAwLCAwKSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjxnIGRhdGEtY2VsbC1pZD0iNyI+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuNSAtMC41KSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0ibm9uZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7IHRleHQtYWxpZ246IGxlZnQ7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IHVuc2FmZSBjZW50ZXI7IGp1c3RpZnktY29udGVudDogdW5zYWZlIGNlbnRlcjsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHBhZGRpbmctdG9wOiAzOHB4OyBtYXJnaW4tbGVmdDogMzQ4cHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDExcHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPjxmb250IHN0eWxlPSJmb250LXNpemU6IDIwcHg7Ij48Yj53aGlsZSB0cnVlPC9iPjwvZm9udD48L2Rpdj48L2Rpdj48L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iMzQ4IiB5PSI0MSIgZmlsbD0icmdiKDAsIDAsIDApIiBmb250LWZhbWlseT0iJnF1b3Q7SGVsdmV0aWNhJnF1b3Q7IiBmb250LXNpemU9IjExcHgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPndoaWxlIHRydWU8L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L2c+PC9nPjxnIGRhdGEtY2VsbC1pZD0iOCI+PGc+PHBhdGggZD0iTSAyNTAgMTMwIEwgMjUwIDE2My42MyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9InN0cm9rZSIvPjxwYXRoIGQ9Ik0gMjUwIDE2OC44OCBMIDI0Ni41IDE2MS44OCBMIDI1MCAxNjMuNjMgTCAyNTMuNSAxNjEuODggWiIgZmlsbD0icmdiKDAsIDAsIDApIiBzdHJva2U9InJnYigwLCAwLCAwKSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjwvZz48L2c+PC9nPjwvZz48c3dpdGNoPjxnIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIvPjxhIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTUpIiB4bGluazpocmVmPSJodHRwczovL3d3dy5kcmF3aW8uY29tL2RvYy9mYXEvc3ZnLWV4cG9ydC10ZXh0LXByb2JsZW1zIiB0YXJnZXQ9Il9ibGFuayI+PHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMHB4IiB4PSI1MCUiIHk9IjEwMCUiPlRleHQgaXMgbm90IFNWRyAtIGNhbm5vdCBkaXNwbGF5PC90ZXh0PjwvYT48L3N3aXRjaD48L3N2Zz4=
|
|
```
|
|
|
|
</center> |