Skip to content

Instantly share code, notes, and snippets.

@djm4686
Created April 24, 2015 21:13
Show Gist options
  • Save djm4686/c94b83a7e3ed502dca08 to your computer and use it in GitHub Desktop.
Save djm4686/c94b83a7e3ed502dca08 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
<component name="ProjectDictionaryState">
<dictionary name="daniel.madden">
<words>
<w>collidable</w>
</words>
</dictionary>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DaemonCodeAnalyzer">
<disable_hints />
</component>
<component name="DependencyValidationManager">
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</component>
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectModuleManager">
<modules />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.9 (C:\Python27\python.exe)" project-jdk-type="Python SDK" />
<component name="RunManager">
<list size="0" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/DestructoWorld.iml" filepath="$PROJECT_DIR$/.idea/DestructoWorld.iml" />
</modules>
</component>
</project>
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>
�PNG

IHDR����6�bKGD������� pHYs.#.#x�?vtIME�#+F�Xg IDATx��{���Y������~�������������^��Xɋ
���L@A��6�#P8� ��
�E����1�\
!U���BLb��I�k)����fv���9}����7���ί{GB7\���TM͜������=��0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �0 �U�වa�<x[;����M `"����4M3n�f�4��40i�f` �ח��9�� ;�ys:��|�����m�p]���4M4M���PUP��R�̶��8�/9��˿���X�;ʰa��qC���Y� �V�y�۝�i�0 H)a�&ʲDY�0M54M�g�\�qض��t����/����K�.|�}�,�]f�0�����2�>l�~����!|߇�reY����BX����Q�(B����b�00��cW��O��M���e���G�q��:;�a���.�y��`UU?jҍ��q��˖0 ��FUU�4Mx�� E|��xr��ׯ#�s�y��`�6��!���Q.?���ַBJ� �� �� ���|�ӟdG�&�䷀a�6�w.Xu]>]ŷ�f����[��C��C�׃��h�u]B��RJt�]t:�� ۶a�&�hϖ�e����.�8�eY������4 z�NǓ'�0��������g>�����a��R��]�i�wxP��̳'�ј�0��Q��$:�N� l�0M�iBʲ�m۰, EQ�(
�u��,�1°Mw=��c*}U��r&�i�(
�� �qP�����`��a�[�{;N�4�X��{��y7���,��ڨ���o{��:���a�0 �� �qE��j�BTU�0�UDB��4UM$�sX��n� !����.L�F���� w�܁�Q�<ÿ1v �|l�^��I�wvv繯�}:� n��j�4_��˲���alQ��D��FBχm������9���m���rlE���)f��'��.1 ຮ��$I�@�(�EQ��ݻx�G�8�U�*�s�a��X`|v���`��뺻��`�0���w�&�䟊�: .�3m����ɿ2 |49�{��������1��7U�B�0 X��u���*f{�@�԰��0��>���|6�l6CU
u]�q�4�e��t��t
�� ��eY"�2����F��!�2��꫸pႚ�}�6���$I0�����Q�&�3����S��a�?*J����_�?9��v:������̅:�3Y-��V�����ceQR an !lۦq���vUV;�F��Z9�^,��t`Y|�G���}eYBJ�(2�M ��= ��"�s4�@]��`g� ���4�� nݺ��t� P55��m���$KC�v�u��,`��@UU�}���pUU��m�E��*�8Nۥ��e�p��a��5츦�OF��{��eYB45B?D��Q�5��x�S�흧��B����N�Ȳ IQCJ ׵�8,˂eY�<��B 8���i`����@Y��,K]6�1�NW]V5<����,�BUU8;;�x< �C!��=�i�&�iڮ[j�%� �D����H�Q! C�f3�y �`H�4ObHH)����a����GJ)?��=��MY��LX���R��<�)��ѷ �󰿷��-�m�DUUj��X�M'\������<W�Ͳ u]ömt�]t�]X����#dY�<ϑ$ �8�h4ZuOUH�RJ���4��9����eYh�F������A��h����0U�:���;�a��a����"C/ �y��B���AӴ�NI�b�L�$ �<C�g(�h*��n(!lۆ��ZD@Q��RuOQ��^��r)��s||��x�<�a�&:���!�(j�/�$Ik��UU�It!�FE��z�F�F��7�"�i!4U�2m�֫(��SX�@����d1�������X, ���Ki���{�`�cö,� a�N�^7FY�X,���m 5�n#�U@�nҪ��E�#'�eNNN0�L�������~�NY������ C�q�N�� `۶���`)%����Q�8�zܺ�! ��{�@؁0 s?���S�5 Tu�, j�&rg����B�m-�l�j`2�����H���@; n�����b�@�e��z�PUU[�X����A��G���r�D�$��zC�z=t�]5�N5Jm�i�&�h��^Y����S�0 `F��[�
?���.˿�afÁ��eY��o��s�ei����Ӳ�dŪ��ʁ�u��{Y�H��M+m ��d2iSNE��ۺc�<OM��i�:�h0����e�$Q���p8ą  ��rXA MS��sTU�ua��)�����
�e�f3M0$=�.�?�O ;�a4�ӻ���=>ڋ��e!I@c���S�-r7�˪M�*ok �1._� �uq�� �i��d�噆:�S���Cf�lۆajZ�Zn�%ؐ����u]c2�`�/_�eYH�l�fB�C�M]����4D8�͐$���h�2�:>̕,���;�a>w=��k*�l*8V����<I��5��S���`�.n�BܹsM]C
Ô(��a`�\bww������zyQ0`@ i�� ���4�:��AE�#뼫*Ax��˫^���T~�\¶�V��ׯc<����nu]�q�NLQ�$C,�e"/
�9:������gK���a�~8�uG/6WUaP݂�*�����vQ`�\����JM�S��}$I�j�确kU���N/^T�)%���awweY"MS<��p]�����~_����e�Zv��t:���1`0��F��VJ�P�]m=��aU�a9v �܇�h��N��4R2Ɣ����8�eY�m[�-H��u]Uk�,����N�8<<�x<~Cz*�����d� À�8p]r���, �~�~_����P�q8>>�ݻwQ<�CQ��^B����h��əѶ�� ��y��0:ao�H����[U�����R ��eT? #_��Hhfò,8����qrr��Ѿ�öm��sH)�vU����" }--E�a��GQN��r<��#�el����vvv��d�z��K��Z���X�`"G �@�!zۻ�q�j�]S�n�'��N�4���� �PWU�n�2��
RJ\�xA(��4 n߾�"�˗/��<ܹs7o�T�X��4����rt����L��p8lWݮ�T��j*�l �@����Z��*���vف�a:���V���V���E��X9 ݁��&!B�, ��RM�w:��TJ��d}�R��p]��<�2lmm���X��4E���͛7�\.UdC�䤕E5�xh�Rk��(���>�(Rs*�)��y�JB�u]%���rI� v �@����^�j�=aYUQ��
4�\B�N��m�W��N܃�8ȲLE�N�^��@ߦi0�L �TB�T���F�׃i����R~����uJ����t:�<����q�)v��D���b����Z�^G�4�P�Iȁ���i��ü� �;2����?�}�kJd�uU� ��"�2�A���}dY�۷o��*�q���!Z���B����Rb4a<����爢H�[�nakkKu}5M��U�>1^U��9^y�����ҥK���J_��<WK��$����ө���Z�B<�C��k�N�^k[W1�@�k�*���a�7-~��n��V�4U�4o �Ϊn�����7�� �i����1j4p}q�@Y�j��U�5����"�0 �!������ǘ�fȲ ��.\�e��Z��Lj�H�5��P?'I��X$�2�NU*���4�e�>��Ϫ�܍7���O+'A魓�x~�E�P#
CȲa<�g>��̟ v ����m[ʇ�~�4��ww��4��Qq��CT�����yPA��֗�%��A�<O "Rt@��<%oB*�y�c:���͛�N�p]W�M��~vww�JnJ*��cY��x�"���U��`0���r,����~��Z:L�_|�z׻���mۭ�v1�eY���leY��70O�7�D�a��9�^?�6��c�m?nK�1�y�s��^܁�٫k��fU����J/Q��V�R;+��� À��* D�T���ONN0��U���Zݬ;w�"u]���z* ��i��c5ȗ$�z�n��OeY��7��BN�u]ܻw��zuaQ�Bi/�y����y��&�e�w?���i����Ic�0_��(l��o��F���u��-MHS���v{�/��mJI
Cp]1�N�t���J �QzJJ��uQk���b�N�ggg��0��qvv����Ns�uqpp����~*�Bx���y�$x���N�<���9����#�9)�ځ�\.�fīW���� a�u�5aǺ�!W�1i�(���ԧ��l>��S��a��SS��wTe�s�i���h�ql���2T'RUb��`�m��҃a<c2>S�KBԚ�9I�P�.E#y��׋�T�J~��wIBD�9�8�ΒN�R���n���|�0 � E TG�6ޗ_~Y ���cA!f��J�EQ���P���q�� � d0`ww���SN�"!ʼP5 ��q����/��c�0_ݩ��V$���kYޱ�\�cZ�, S(�ek4�y�v��{{{� ����T�ے�����@E
�e�?��n�4M��j����-�R����R7V����*��q��l�Rd�i*Yrj�����N���Q�.B�G(�F��'����8���.����0�L���2/`Z�z~�0���t{6[|�?}�@櫖p�� F��c׶�x��v`J���Q9����$ ��+\�����K���0 [ ���prd��(҄�"��8ʡ�, ��ׯ�u]looc{{�NGM�w:ض�[�n�"����"�;w�`:�*�!�@���*z ��8�C���@�q(�F:]���, /^�m�Je�\�v�,U�oY��E���c�_~�_�J�<��;�����B�0~J�0R�(��h`�!a�ʕ�KӀ��e�jS��cdY�~��xA��8::R�}ԅE���v]Wm������\.���E�ˠtR+�+g@�Tx�v���9��0TƝ$F�˥Z"�4 ~�a�̢(Rw�ͯ�f3H)վ��d�^���w���y��� �\.�xmd����ğBv �UGg��-�ćMӸdIQհVF�nj������U�0D�\������Z5��W!mW���._���b��,� �z��-�wWka˲D^����$C��c�\�޽{H�D��0���B?P-�R���C��C��W�U���*^~�����MS)Gpvv��3�E���|'���I�˲DZZ^eY����T\Q(�a�͉I����6%� �r�]�����.���W�@��������^ǴDU(��y�@KƑ�[��5�A��ŋJ�c�\���ۘ�f�<[[[��X R[k+;�U�k� !�������`��ՖA}�9 ��l �i^���TE��� �����jh��l6CEj�0�z��x���$ x���)�c�N�`��P3 ME!M<��s����p����1�����-�O���4�mS�H�\J�(���SO�:�,ܻwϿ��jS�Z��\{ۆe��B�W��mI�|�4�l�Vʲ������Q��۷o�^P"�;;;����9�˥��h�C a�&�$i�8��r}��l6�r��h4B��;/|UQ�97}x��k%+B�Zx��)x�ܺuG����b����FڟN����!�^wQk�󤓥K�Ӭ 9eSJ�����a��<�pt�5�_4 ��@ vG;888@��'>����(���P�m��A���.^}��|��vݪm�U�!G��b�,�,�T��,K,�K��� .�… (�Y��饗prr�ַ>��X.�j�r�TH��)��H"E
�UU��%�2�8�!��r�T� �z�d�i>���[j��:�F�\�<����hN�U�a��B��0��������<\�z�߮ǥH&MS%�HΉj8�,�K����i��~����O:;�������m[?aԕ+�������Շ�e~��?��� E���or5;Q`�Ȑ�KTu��V7��� �� �~;�Vd9 jX�����Ǝ$������f>J�x��g�yGGG*5���+=�������i���������Y��֭[8==ţ�>���mU?��|>�`���\���|>�x<��$�T�J�9��� r !�$ f���>|���P�����p�8�q��=�\H���9R�����(�REuׯ�\��|E��0~�4�?/�YY���4���C, ��o��,Å ���c�\��͛�Ǹ��EAg�{\�MU�i3>��V�C���MӠ*����>�������Z�<� f�����>F���*��[��=�vV!�eЩm���������H�y���� Q
��Vz�JM������FǪ�ݪ�f�h�-�S�I(����l���DQԮ�]ɰPa�'MS5�N�y��va�f��
��g]��.;��
���1�_�my�"�m������A�,����oAQ��Lf�v�(�
��'|�a����ir��Jsu���kS����ۍUj��X����׮]�t:E��x��G����� o����NUZ��*���esժK��͛71��0�裏�:ɓcp]�^uu>�;5�0O�%z�!1P˲��Ζ���$�EZh5����K/��� q��<�M����N���C)6]*���v�T��io�!�ف0̗O8��?!��5D���PU:�F��nyY�@�J���ϐ9�N ����0D��q�¸m[�(��i��JU�����"C8���|
�0T�WO��I�
�m�bA,����j� ��i�J��V��8��?�
�����LI~�큫b>ET����B��E#jX����3�I��� ?7�4/����\)E�RiW�\Q����B۰�e��k����m��}�u���*�m+r���|v ��w�\�6�s�_0 � մt��8<l��i�R����v�����x<�O<�Hs�vk쨸���p��UL�ӶS����H��^��vVE��d�ZZ��i�J�:�{�1m�`����!W��{��}�6,i�w4 `1���<ex~�
� �r��|����t:*u��������0��9�,SZZ�2!���W:X&ʲ���k�0�[*�O&A�8�QU�r��N���/_�h4RZ\4�Nυ�]�U�+�4�A-�6��"��K��w6�/;������[D]�b�4WI.��<W�zT��
ɋE�7n����*et��m%�N�~�{�L&���S�(eC���IE�J�P7�n��V)%�����v�.�v��q$I�|z�0�u��$ �(�d2i�ؼ�øw�F�F�n߾��b�qp��Pe��v[۶Q֕�Т�YJ�Q�$�ĭ[��y~��~ ������i�y�0 ��O*�.*�S���w IDAT�u�¼��:�^��:֨�W������|�8������,�F�����w���/��Y�~��J��*�p�d2�r���ёҌ��Z�sl�F�e�������u�@+�P�����_]F�҆�(�4M�f3��s�������rC� ��󠮣�d�vhЎ�1�N����.��an޼�����--��;�h���;�$�NPѼ,K��}����������á�=Eg�����
�丨��K��9 �m��į�� ;����z_B�s)���X#Qp�7��*t:U�����ң�`��^Kڋq�ʕ��tB&#Y��2��e���)�N�EQ Iu�m[ .�K��c�q ۶���/���z[*�����R\����%b�j�SE�~��2��ea0 �"���j�y�4x���Ѵ����i��Iq2���5�1'�Mu2�ty��S����pm�c<���R}��?�Ӈ �)yJ�I�99��1PT�� ��a����4Ʊ�`�� ����~�5L�s�e�+W�(�M�yUU�u�vV!�U�|4�m�#=(�,oe�]%�A�A�=D�ij��&�i��ȩ��1� PI�e!�2�R��Z-{J�{{{�, [[[��1�N�y�j����?�<������ab1���ݻx�g�$������i�ֈ<�SN�o�e*���zx饗p��-�q�'�xB)�R�
��< �`!�w����u)��u��%!Muޠ(��� �@� &�m�Eے�c
��
M�I��b1��x�e��K)UB�`<��k\�tIq�޽�vX���"R�u]_���7�@L�D�e���j����S�i��Ǫ󉺒vww�.D����l6�t:�Q��}���S��v|��� j9u}��輸���1^{�5������t�\.q��uTM�$I�I�{AzV�eY� EI���I���C
�z݈:�Hڅ&�������
�l#�g�}�G���a������7���i!��^u���,�2P���ʸ�v>JIM�gx��W��tp��U�����3�R����*'B����4�F5j�%N����?�|��J�dM�N�4p��a�M�����ޞ�X�����pvv���C���b>���-ڈh53T�� ��]P�(�
�����Z�txx���3\�t ��B�7���< A�, E8ԥE�j�~X�E��w?�я�+�|~ �/�y��ݝ��3BlF�>�(|�W�A����^�W^yEi:�z=�f3��J����p]W�`� ��B�2�d�*�B(�C� ����4�h4�m��a9��v�^���q|| �q�>q�0���=/�� �i�H�6�g�\��Zc�{k���d2Q锚�t:m�:o�&ESd���:��R �Tm�RL�@"��6���fD��$۩��;K*�[������,�����?�ߌ7���!���o�_���0�j�m �B������" C5{�X,��=Ŷ�T�Bw���~˲4 �4�iZ0M uݬ�D����ftgCQ92���/ CU��eZ�!RGX���d2�������>�)! I���Jx����:qUYB�¨ݩ���T����T�������k�tu_Qt��I+F�'�����(�� ��t�P%�F�e�045Li`��"KX��l�� ��m�}�?�o����p�����DU�.�0ް3�(
�!:]bCO3Qn��I�R�n�n��� �NN��54���=��9E�vQ��kJg5M����e�V�R��������A�j��Hm�tʧ}#z+/srn������ϛ��|��]���J�� ���]z����%��?:��Na>����C/}����;�����DZ��F�H��4�I��%h_6ɴS�.�AQʨ��T� �DQʤM�op��n�t�KƐ����.��t��@I����tI�w:��K)�8���t��i�B����cu)�������?tGA��7��J�G 9�Z[�K���'�'�u�}i��F-�B�&�4P���`��~���~�g�����@���^��uv~���0@U�}uY���*�@���<��r��vu�%j� �P�2�����f!#G�m�=t��?=��nG��)H)�\�����T� �P��u5]��� �����,T�L/�Χ�Z���c�'z/I�E|����o:�1����O�Ez@�g8<<lk6���|��53؁0����w����l�ګ�����M� �"���l�41���Ԕ�l6Sbt�5M[[[0�����ԖJ�sJZwXzt�G$TO�y
*%��96��H�c>��R�qGީ��4��OY��[y��[,��L�ڒ�!gDs�y�1�4�|�4�>�;*��~�L��xzTC��>�o�
��J��~�r��������`؁0��m�3���G���<�B�7��D��J���=z����eH�B `�6Q���a6�u��)i:��)*�\��S/B ��#G���U�d�� �"ժKB�8���z�F���z>����E�ε�N�^ E"t�^ˡ��ٖ�?�����H�KߡNu�4M�+9,�T6�E��E��X�@�u&�<GY�?����);��b>/��� 1�%L�B ���VNݶ��h4�`0PƇ�ʲD�x<��ʲle�*Չ��)���⮾�/�s�\K�G���͢1Ed@u�%$�Dr6��”����HzX ��T��c�$hVF�Ѧ����bK�Ŵ�74�ѧ�6�vr�� �!tH�90���zt?��b�� `ض����o��w� �f0�0��y���{���GQT���ma�/a[&,�BS��v����j�Y�H�
�� �uP�����[C*�0aNˎ(B�"���!#�e����� u�Q�l<#�2 �\�5�0��Ӟ�8���V�y���u]��l2Ž{�0��ծu}�[��SI��PO�Q��:����Юw]+K}ᵺ�f�f�W�$�t�H� �a�0�I�������a>/���A;?�%��j�h�A�.*H�@�\�p�ea6�!#��c���+��
[�:�HM���R�L�AQԐ�R΢,)�DQH�R?dܨ(�Z�JQ9}g7�t�PE��r�(�����/��(F7�E��ݣ�͚���4q��ݶuײ��v)��xR�V[O� �)!��xr۴�T���ܾ?B=&=j��@*�Q���J�tŨiA_ENu�X(�E�(Rˣ:�!�*G��g{g�#���o�����9����_.��G��k��ƅ�K�m��q�޽{�v��0����G�5�W:��)X/����MU� ��X�1�����yPMF���[z����P���uG��Q݁�ꈢ�B�����4E9zڌ�� ��]�5��ч#)�� iH��8ݖ.�v�mF-y����s ��������o����YK��[��E����aW@o��D�:�R
���ށR��!����y�K�.�����M� �͚Qݜ���p��)�ҵ�;��h�-������R±el�9Qm��k\�v �NG`��klQ!�Z��vl�D�EM�~��Y�)z/@��<�6�M�dEt�w�-9X=���(�T�9b���A��в��A����s! G �}�{�on�� !�����2�Ҵ�I<�c�@)MS�z=�]EY�-�o�!�DQ�n0ue[:�oBƗn��t����kA�ѥ?�&_�/�a� 8RZ��ɠw:���"MS�Dj$It���O !�>�N��kd�6E��Z�B�C��T-��2L Ջ(*����^Lp��ɹ�����~� � a؁0�%������G�T�������ֵT�2�[[[j�k���������� �y�5���n��I{��L��d79��v[����d��u�Y}/MS̳\u\�a'aº����*�B�4��#���f3dY��x���)#�����(�R��2r2��Y��d|� 0ל�f�OT����.��J�r*��ۭ��t������I�ǧ'��! ;���c���]��;�0�ְ8��
�@����i0��� MS�e�%�\.���C�|P��nuT�,�����(��G����^ ''A9%:YSʋ:�tI�f���S6�����筝�u )�o���4M��!G���2�z�C�q��XӶ?z��d��|���L9V���� 9��EQ��F�����}�6^z�%U�Y.��n����*)���}9Kv �p{�{�?�&L)Д�!�(��� ������!D+�*���p�vwwq��m����Vu]�-�B�O�z4r?g��y�8���n�Y�,����ȼ٦���j�y[��,�0O5}_9� T�K���c��=ݎ�}\�+�W��z=�a�6IO��'ɩ�C�q}g�^�W�dQ��͛x���Qx��q���S�8��?��?����[°a�!�w�B@$���P�ꦆa���N��(��8M��e��6=��c�, ���SS�Us>�A�H��D�;r"� $GB�hJ[��&!F=J�W��i}N����nWW���hm#unٶ���3���>�a�&�P\w��ť+��e�F����<A�<���皬��i����L�Hn߾�[�n�����coo���ibUU�^U˕0�@���(��U��`[���4%��FJQ�5R@�%8::j�D0pxx�8��>���F�)���*�bh�FLӆru��jUȵ�2)����),˄�@ )��h���p��I��mޣ�wZ|DN�Zb-�j`{{��l�N�M/�s)����|Z|u��L�QT@·���D �@Q�0m ���v���Fk�T� �$I�FMڨ9���H��է�u���+�N�8::jU5���eL'�j���]�U�����o��Cv ��EO�i�u],fsTU�˗/�s�Ir��>��T/-d��H�����tY}�COIQ
�D)5�k@�����M�D��EQ ��ȁ�q B�i���9 ��W�?�
���JW����S4�GD���>�a�V��N˱�s"g����J��n�½{�0�UJ���W�\�x<F��A�$����2�����?��a�|N�Ái��;h��*���p8D���J�5ʲ��� �,C�׃�8���=�ާ����MC�dP���<5%��zJ� ��-9/�E���4#Mף���L I���TÅ��UU!�"P��z�Z�P����`�����<���K�P���<�\}d�)�G�/}�C�7ua�������AH��h�~��K�.��=�L&�\~�/�a�|^|��(
�i�F�r������ ����0�m�F��m����t��,���I}S)Ww,�m��'oԯO�!kkV�]mj��ĝe�2�z�u�^��i��ΖRb:�*�������f����tl�Umn�t&�3� ���@�ʢ�I��Xs�z$��)��Rb0�����<t:���{�.F;���5�0�kO���{��`؁0���o�OWU���ш�pZ�����ޞ����=�"����8����0��K���C��T\r��69MƜ�z>����V���\) �GI��P��R �Q݄��6�}���UP�+�_����FﺢH����vuhN�"��(Po��Mi݁]�pA�5��s%�2��v�n7�>�������7��B1�-x�R�Ӯ�(!��9^}�U5��E�<��=�$�Gj�4��G������i��C��" �n�O�4]M^��Dr"@��6�����zz����꺔��u�6���Nnsc�.�r��z}�:�(�����qR:���Hj�~
����4���B�մU�ۉ���/]��}��`8a�P���TS��?L�S+�I��MӨ�
�0T�ggg����R�Ν;p�~��V���!diw��p���&��0�h7FJ� #�wQ���w@��u��(�~_E0��$"�;-�Q�w��7�)5i�kkc�m�� 'B�!%�Hb�k���]�]K�C�ǧ�'ͤ�c����t:�Ƭ�������z�5�J0�@�?����e�$I�h%�$i��,���� e����k2괡o:���_Vyv}�\O��q�8�P�B:)��}d�hh�(
����9�9!TW����ykpW�Y�p,y�#E�������:�(¥K�֞�>H���tz�zT��귡H�Zq��ANʵ�I�*;wZ��ô-��K��.eBϓ�S��A�ej����<�H�3��� +v ����h�̍ Ԝ��:�L��|�2`J��`
uQ�-���v�� �B�T�������y���Uq{�Y��� �"�,�(�YV(��v#y^�,PU �de(%l[��(���� ���:�SǕ�8��y��X�kjWQA�40L��d�4���!��r�l#
����.�N�DQ0�D�
LLC�4Vi��<BН���u���P��Za��k�n`ISEY��?Ea���"E��x���t:E]��������w���o���r�oR��7D]� �(ed�6��a{B.r���v�T�@#��%�$M���˲pzz
�uq��E���ZF鴮��~��f�r?Yrҝ���u*��U�:S�cPG����z!P����h��n?�L�f���!zDbk{Gt9y�wY����EQ��W_E�$�[W�I).R˥aC��MIvJ�Qڊ�D�$)���ΐ, 5R�5l��������;�#�/.��y u &2L��%Q�o�V�d�����?�:�p��U!pvv�&�?���s���ܜ� �IR���:E �")���A]�QW��;�Hf$ C�q��|�&�u����N1��B5�-I�/���]�����gc(��$ &�����)*�{���5P�E�$I�{OQJQ�/�\�1�*0��b�� �N�z�i]�H���D%28�>K��z���ɸ�5�͓����f�� mL�TM�� c���m[uU���i���zjY��
}���B��Eiz��>`��>�4U�� �`0�p8T�y�uU��#� �$Q�]�m�N~����b��R�eY�I� I8��\���=����
���/� �\�L�ݺ�~��N�8�p��1�L�el�AYU�Jhp�X������zk�o�n�,S�\�$��L �4�w4��a}�W�[�6��ث����L΅��;uo5+�IuC.��4�2��9[]BE���- �C�%M�������|�"��B=9�Q���__��)�BS�T���?�m����!�@�/�������J�ע(0��Wm���Oa�&z�ޚ���8�v�^{�5\�rB��0 ,�Ku��T�nЩ�J��u*ovB魫�ET��~�����:�.rteY"�3Ez��Z���rrzKoUU*E�/Iu;�4U���e�m+'K�M�^l�l!��tz>Q-�K�-�YU�_�o���RHX���QEQ(�Du˲Tg.�6�,����Ҩ8��8NNN�I���е��)q=]C���ezDA'p2�TH֗<��o� �u�] S*�����5��\
=���$;]�}m�n'�˶��:��a%I�Ҁ�>�Ǧ篧�ȹ��K�a��0��wY,?�]��]�0�@�/��i"=���8�������e)Y�(�TDGGG���J��� �(j��5=&2�d)ͣ�7k!Tp�T���B�SO)�NE��8o��&����i�H�l�=�秷�"����юx*���������׿��kȲ�U@�<$I����u$z,JI��(}�!����ҋ����W��;����|%�.�7)Y#� �MYѢ���!@
��� c$I� �DY7����j�u_�<���H� I��0L�5V?'*u�� �C�#��6_*Z�Aޔ�'�Ow�Q�J3��XT����R#�`�6� P�X�c���AƦiP55�,E��h�R���0�V�PZ&�,��F�0� EU��(�G��(�Tꌜ9hj7�:�hq��*U%��4�U�n'BS����M�������r#�0MS8�� l��������%�*ZGQ�+W� �"����ڴ,:��ѦH I΍���OU���eL������΃N���A�o]8Q���A�"��Io/֣rP�ӣ�/]�DJ���Ќ���u���z$C����ە�5�{�繺/z<<��W_y_}��������g؁0_&uTz���V��ҥKx�W0��it���(�/�g IDAT0�Lp�� ���AȕJ�u�⭞B��Q� �:��N`������^�@�H�u]EOAQ[�.fH���d�!�fA�z��*د����5]_O��QK��s� ��ŋU1�������8N�&X����9��eS$��1����f��- 8����ct�[X,�����?�s��g؁0_6�h"�v��t������H��|�;՜�޹sY����v�B�V�C2ؔ��w��5)�6���c4M���=U_ѣ�F�%R*���)P����ub�&D�7�>n.������/ׇ��.,������lMjE��}_9=�GNM���(��rT݉�f>����C�J���������5�v ̗�%�i�q��-�����~�i� R�����{�]��I�D���X��9��?�5üiP�+e����]\�4��D�G�ahN�� �z����r`�+���s�w�P���騹 r���������ȁ�+��4M�㓚���!�?�W�w~�/�a�|���w�K�4�ݱ �f3����`Y��[����CP>�Z}������`0@�q��A�,���5Ir�D���_���*
"�Q���F��>2�����M)�p���^�h��i�a����ڌn65m�;Ȱ�ˠ(�����nK�I�Юz��m�x�k����� i?Z�e�&�e���_������^�q��3�@�/��ß�����@��;R8<<�;��vu��`�X C%��^*޾�����8<<D��_K��;�u 2�m��QFd�I�C�¢��&���.#����7��X7�Ts��}���~[�:�R�ݐ��� r�@@��$�H�E�$��2��׶;�˨tGGs'z�p8��7n�8�����������_�O=�����ٿ��=��+�h�P��(���[𖷼@�O�N��, I���S��V���ܦi"I,�Kt�]5tx���U4�GdI��肅d���A���<�I]wL�6�r��VZdP�����y���-=�E�'���n��)�:��
/�K��G+4�Ni)�Ft��>�˥ꖣƁO~���C����a�|YxqOD��S�)0�S�� ��B��w#�\.�5�[b��Q�-p߼y��SJVs�D��*�Di�/�4@U5�k�4�Z���*WO�s�N� ;?t%\�P�@F]�
��n�AQ�(�v)V�$(���K-��".J3��E�<Y���5 �=WuJ���X���Ѐ!9�n����Ip�&�!$�<GU5(�{�]U �v�������?�}��/~�v �W�0B� D 4P�zoo/^D�e�Њ�^{ ���J��qdEk��8���d���N�Ng��vS��~����Ki!=�����LQ�-�z���_o���j���s�����m��'�Tm˾���y����Y�|��եݩ��u]t�]�����+R3��ҭ[�p��]x�� .`kkK9Pz�~�� e����j�'K���(���O~������g��X����-�|�8;y�4�Q��h�
h*�U�N�EQ�ҥKx�g����ԧ������l6S��M��N��0 �R@zJHw�ۋ��� �n6�d7�L���[i7SJ����P �x<V�/J�moo��[��(�E��Fh@���^B�! C5�a�&�өr��m�aL���}��! C$�9�(�!��cP+�M���p�g_���>����O���};�#�!ď �}��!P�Ν;���w���k����p�4Mqzz
��T�������ap,[�1��q�h@7�� ���p�h��;�~3�����_�]wb���0��E���q��M%Bu }n��s3MMU�9,%�r&�b��{�Nq# C�a����|� ��� ���l6�a�ġ�CZ��!�2��o�N�?������������ΰa�ظq��߸x��B����~���|�<��a�&��ۿ]��VU�0
1�Lpvv��l��,�����T��N��z���֡��^�з�Qq\/,o
(�b�T��l�%ȩ��˲,Ss&���޽�J�W����]���}��Y�x+-���Bq��JA�"� ����,8;k0,8����@x�#'A�@�ͮb^�8awY�1�>����g���zW��{~��qd�����~����T�~��;�4 ���t�ȅy��̍�t� .��k�8qb>��(����*�m[<����p�<�� ^�DQ�$I������m�;w���8}���֟L&H�D��D�ʲ�h8�r\|��������,Iލ�x�W61��_��eY�X����0�N����������oĹs�p��I}���*L�S]h�����*q��i���0:�lJh��#���>3�-��<e�=�[��Gr�d��$HI�N�i��,K�q��,1��g?['���`0@�ez�c�Y7WZf��|OȎ?��l�3g���)�áN��e��t����e�!��}�����������\���뽓${W��/�j����ז�g�|ε�[d�= Cloo��o��榾9�x㍨���v{wy��eQ�o�uY��rs���� �jo��0���$���T�hn��c����Irr+�s$I��7abccu]�m:`�e�n�"}�$��c�����Z�ܮ��^_��: �*H�y������a���;���3����y���_���.�`�
���t��[�n�4��<��D��'����.����'�����<ϻTH��7��r�J�ԋ�Xت2�9��-����Jü��*`����Y;" ꪪ�luɳ�8qEQ������|]�����kH0Z��<���q�ϗ� �y.IڴO�S�>F��d���<)�������w�{�7>��My��Sg�_c&��'WVF?�:��Y^`ee{{{8}�4l��x<�������sq0>X��p�뢩/��2��EQ�my���⺮��$���Zf�Cs������a�d���.�O̯�L��: �2��؀�z�������� 'O�@>�a~�h����u\��`[<ׅ�ԗFŚ�)�]ׅs���
M�V=��Uh�J��cee�k��=��7��m���7��RU�J^��=e����X� ��O)��{ 7�p������0�)-������FY�� _�ʯ��v9�Q��BNƬR�U�ي]^� L��yf�۬����Գ:����V3W7�-��swlka�Μj�uZ4h��buua�_��^��o{�Wy�W ��t8?����Cn��L��gΜ�C��(B���O�R1-GxeK��Ae���TR� �;��q`y�+����m�z�a�6F�ڶգpͼ������j& C((}��رc�@R
%@-oQ� |s�j9X�ݥ�`�֛��X���k�^�G����w��ۿ�+�@�)m���_�u]�8s�~B�������^��>�$�C8d�H:�M^����ѭ��i�˧�̿SJaggY��ߟ�E��-$3H�D����{���n���� ��@w��d���<�l�)7�T�����Z��+���u��������͗������xe=�W!��'�8�!��o������� �U�$�'�dڠ�-GO�М�!7ii�(5Ҷ}:�ꆂf�\���|��/"�2]�![l�J`���X�nٮ�^W�=���|ym)n4OZI���%?��i����hI�~���گ�w�+?����]u����8�W�i}}}���ꇇ��;�y�蕆B-ou]�o��H�kkk:� ��ˆK�9 s�l]mnn�����rl�\q,�`�uͭ&s �t��Q�A�l�"_�뺈�h�k�R3��|���B����o���>��O�j������)^;��������������+ΟX�ǐ�NfY>~ @�t:���γ������^ �7]s�Jډ �C�a�W��LW�_��<�C]a%�u�u)w�.�,��r�NݜP(AGVf@��+����n��V@tAハ<|ۧ~�c���H tU���盦u]�ӧO#�c�i�o���l�n>����$��MԜ���=��b_o=mmm-T�_i�`�!��H����z �ts�#��\#b�5;�*g���<�� ��P>f����(��{ˬS�, m]-l�ɿUU�,����������EW?^?��O+�!����I2��9h�
m[ò�o�2�<����f�C�֑��l6[�B�` 7���ms�`N-4����2s ��R"��l�F]V�P���mݠkZ��¬��x.�Ŭ���:��|�K�¬��)@�:���u�t-Zt(�
�,C^P�e[����_x�TW�Z��pXT�~�w��+�����mۿ�We�)��%��B��� \Zx�),�q����DE�^������*0���Y��^s6���t���k��̷��Saht�����յFŪ�ж-677u@ �@�Θ���c����x�����k^����}�-�Bb��N�~������ՕX[[��F�����x�'��>���@�כO����2�6 C}"�\IH{�夺�vA�O#�6�yD�<�+7�傾+ q2ۦ��������枻����d�LV6Q�,KDQ��s�| eYb}s��D&;~�#��O�/��x%����۾��_���<��J���}��� I=HJVR�.=��Js��!�k��y�I��8 7g ��eޜ˲�+��a�>L��DQ�OLI��%M%�"_w��8UU��u�IUU��7���l��&��!�ޓ��!��@���w>�������ַ<�鳛���㦿��nvl�׺�FU�]G���<���ҭ�m��p8D۶������>�<׫��#��ō�Lˍ�K'�̱�W*�[nT���XNr�kK���݅�� �& eYG#{�(ҁ�u]�e���-\�x�� ��}�e�G}��� �؏�/�<?��z����~㥿w�+^��]����7�Wq��Y�|KJ�v�hWi`����Ђ#�2lmm-���:tew���ȕzc�E'��U��4o��2��e�������|��Rc�e���7g��jJ>]�"��N�To]y���n�IW�/�_1WK�RS�����ދ?�����9�k�x�`m4��pl�ŭ'�$ �?��1u�@��$1�����9���t@Z�� XV m���� 3��7j�����$x,�̒��6�f��\;v Q-��|?2�OڽK]>���*�8օ���cǎa2� MSH���J0K��+���}�~�W1��U-���?�T��Q �>�O`I�8ITU��p�,����h4��̷��(��˲�S����Y�a0,�de`N���ō�y���pak�l�.[f��aO� �cTU����.y�NA]r�JV a"�2x���d��h`>UP^k��R��VL�:����o�=�GOẂ\C�8����jk�q<���?uݠiZx��$I��@��(�@�� y>C0�P
h��i����y�����ql4M���aY��c��柮kt���Fm6u�c��0B����i�`e4������$䤫��(\Džc۰�BS7���e!�}���K� i$i<ځK��Ο���8F����/|�~v�W1��ӂ���m��B���F�p� 7�~E����t:=�:{xx�O,����%z�� R;!O��dt�03DVWj��<�c�.��:ٲr�}i� +Y(��6���̗,�[H�#q�9 ���7߾ <UݢP7����ᏼ���rn91���G�%m?�k�5~���V0������q��}��}Oo I Ȳ 8<<�e���H� ����Z����mB� �u��ȗ#����Q��ĵ�˒��Aο_ y��$�o�c��si����ENfY�B�����G\������>ƫ��́\c�RJ��y�;I���L&�{~���mGd�a�6��@Y�H��?������i�.�r��|Q��87�J�����D�"= ��*�JE4����������`���R
���st��5�u�t���=����WVV~�����y�W ��ԏ��t,uܶ��������� ��zH��h*ߥ��2�V���q������zzL�$�˲���o����M}q+k~yʶ�<��J��l]�̓��V��_��k��2�<I�\uT�U�fѣ|�I��_ö����7����+�@�i+���Աp�R@YVH�;;;8<<�뺈��e!�s8�����*qyB����W��C�����:�/� 9�qK���do�4�i8�Ո����`Y���t�� ņ��^s+ʜ%b��ԂH�J�T0`q��eY��
��0i`��������"zZ���-���k) ��qxx�o�R��1� @��Ȳlx�`!�=��t��=YYYA��f���Zl������Z�7�KI�K���4���.���ʢ�l6�������[��j�LΛM%�as�c��B�a9 &3Q�0,���%o��/��"z� {�{K�ʶ����f�2< ��9�y��'O²�~R�扒lN�]��~U���Y�ui���$pic]V,x��ֵ$�ϟ�ŋ1����1_���.r��zG�J�f�s0�0�jj9�ɿ�<u
��P�k�<������{�[������� y����p�r���@j.Dž��O�]ۡ�D�>����f9��ڶC��J)� ��~��J)�q @��ض���PU5�n�5%�&��JYp�BӴ�n]2�N��#�`0��ٳ(�Q�|�Q� �H�����}��~�nj؎˶P75,ۂ�ؘ�9��AD�
���h� �`Y6��eY`6���<��Q�u��›��Y^Q�Bה,��뇽��������9���h�����.��0��Qo)IR�v�l}���"�s��P�"����f*�r�.C����T�vY�����u]����#�f���]%'�����ܑ�����a"�����u��1�²,�q�N�U�}�[~���$b�k������[� tF����gcm}i�b稛���PJ�%�i�Q��k�f3�ߨ�
y�넺9�C����œI.�I�Nɍ^P�F#]���[�s~�-f&�e��|>}$�H����������"��>�
��e�ʹ�����#���@�Y�,�l����َ�ڦ,`��&=�2l��=�� ��t���7o3/�e��48�N�����x���loocww���H�yr^�y�7��J^��<�v]�!9���p�J�;e�{�
GںǃX�+�h�K��
�l�Y1�R|?�$�n�w�t�;y�1�\�fi����Y���;�t�4�b:�b�`�N�B888@Q��z�i=�"�q��x��m�1�Y(ē��t��2��
Y�� �$IY���en���x�3�LG��I�X[[�h8�AGN���ڶ�l�c���z���G���}׻x�1���w+��'��A)4M�"�Q3���!�s]'b��SQ'N��ٳg�hZ��.��++ ��C��$��\t� �SZ��[sԭ����*s��l�������Y�p���Z��C� ���p���!Z��� _�� ?������Z�@�P�Y���׺���cێmAa����f�2��x666�i+���H�>T���\I,�������
��#����Xn�(�&�2L�SE��M�h[:�>��Pm]�z=]�aV��L���}�%~�~6F$b�+�م�v.��}��؎mYP
 b$I�u���Ѷ-N�:�OA�y�8�E���uS�<�/�ke6V��R�~_�K��(۶u�\����fw�'�ڶE�$�N�:P�v[� ��۶E2Mt�� A�$I����w�ʿ}k�Nk^!D ����V����^P+�Xk{p���`)��w
u�� �꺂�X��m��e3�e� �6�^-�mL$xTU��k����(
QU%���m[���Z�i0s��)�d2A۶ ����#��];��k) m����q8�� }x���i��k_�� ����rˊ�����Y�k�ǻ�����A�N��ض������,�!|����mZ�I�ՕF+C�f9�4�Q!:��^�HU�m��@z�y[�~���i�$ |?X+m����m�b<�.��e!�" �C�{=8��WPf�y��'�CS5�<��|������o|�[VD ,a(p�IDAT ��D�2�����k��G[(�S
`]۠, $� ꦄ�{8v�8z�y>�m)�����������с �2ݰQ��%An���i����D� ��m#�s�����z=}�7�"xG3A�����X��Լ�o��~��n{�7[VD �W $�w^�����M{�n[X�.l{~��pr���ϣ���Lo��c����ө�frq�]�5υDQ��mu}���ʲ��ӭ�[����8�i��~_'��*K=8*MӅN����������.,��}��K��@�����C+���]T7�tmB:�*�m��\���x<F��Kn�e�!l�C����ֵ�����?ʇ\��+Ņu]#MS��c�z}��6Ovɖ��������kK�b�����G��EYֽ����u�� ("�����f�����u�|�����je՜�lGa���1��p\�~���E������9�y�8���
�>VWW������xX����3��3W�����,u��:J��U�EQ��}lnnJamc�~�'^���M1�����HW��V1K���ɇ:/��t�}g�$ʶܳʲ�Y��>*�;a M���}t]�'N�̙3�}���!z���Z��$��qGסH��P'��� � 飥g������rleee^8��w?�ȣ?��/}��o������aS��4E�ۭ�*�?n;L��'��\w�30ࡇ���l�F���-����֝y���1�N
m�� s�+Iq�q��VAoq�v�T�W�<����n�2������j���o�� �D �7LfuU̾[̲�"迧���q��=��w\ǵ�<�d:E�T{!��Ǭ*0�����O<�gm��ҕ�tџ�=���{{{��w��+�,��o����꺂�9�<vQ/B�߇빯��W���G�BOM������ý��axS<>g�Ȳ ���f�d���>y�loo_V�~��U�{b�1`۶��������x���u��}��q�^oޝ��u���߀�m���0�����׼����"b���Y���A��~<���ȋ�t�"/�55��8����Ju%���K��:�����g�K{i�)������S�mi��(���/���7� 1��S�
�G�I��]ۭ���ae����P�\�B \6 Jj8�F�?}�J��E�4Mq��I8���K�{۶�^��c��-���� k�ny�^�Js"z*k�Z� �x�c;��=x�����&),��9s���q�ű����,��9����y��4��f�}�Ν�e;���p8B���v�O��s��1��U �=�6�k����l�o�۞�%����!}��~WUU땅4`4�!I��ĉG�[鱵�~�~_w� �� ��կz��!b��D�Ng~?�i�Ϟ[W\�E��z�d��^�*D��B%�z��m�"Gue�� z$�ԕx��$I0�����+�/^(�!b���"�z���o������Π�*�VV0�c�iWj9�V�u]����fY����s��J�ߚN�/,���I���a���E����*O>�d����s���'_����A�}��#��.�h�RJ���y/�<�%�Μ=Q&��w�4��eY_t]�K���cW��p��J�4w��{s���3Oo�m[�����U���B)���]������[{/�z�/�'O�BO#��g�Q<����?���~m�/�q�p}E)u��87[�|��h4B�p��d�N�ӗ�l_�O���H V6W�R�tzr��ȥ<�8����nş�_���'����IEND�B`�
�PNG

IHDRK�4 pHYs  ��tIME� '0�U�piTXtCommentCreated with GIMPd.e`IDAT8˽�!��P�{2��˾�~������,1� &��`�_�bZ�U��d�bRD��f��|��n�N��;�{"��LE������x���j˲�0 M� a�,K�e �E��e�����������\EQ0 �&i�N���Y�at���O�,�h��XE%I2��u��ME�lQ�k�$E��t:a�K�� �r���7AA0�RUup��ð�1I�����K��Wa���0 ���#�x<����㤃��n����I�O��=�(��� �����$Ilۖ$��Nf��t-��!���z�(��8y���^���u�۵;x�����i4�~7����� B����j������$і�IEND�B`�
�PNG

IHDRpK�]%cIDATx��]kl�^�K�#�RE��'q����!�<R��&R�T�Z�G�
�6L !������c��bl/~-Ư��_��`^Ni�ԗn���ܽwvwv�^Œ�)b㝝{����{g��Q__�TWW7���HX(�;D9�#|���Ǔh[)�g_�&c==$o�L�ڰ�ܿ�477S�Y�GYY��v�U�:��T�,]��{pp��j[+ %�A���*a�y �l�{��J`CCøm��t�� �֭[*��y�@�FuVvv�$*d'� /�@ ��Q�K��>�D����F l���� qD�=�#�p�<�s1��i[.L�5��8�0�X���D����5���#yI!�ot�a��bV��!Fz�h�m�0�~�\���"���C�`[��Q[[;��~*9�w ��PM���4ۊa���4����[�����;:*%hزE#�jBō&ږ ����X�j����&��ٗ�j?3̈@��ׄ���E'Y��峂Y�HQL�
�@ZV�5���D^���E����f�����紽�jB�R۪p�ݿʶ��ԝ9��YS�i?�}Dqz�b�� AE�9�紽�j���%d[V���̜X��!:R2O$n���*�$2+�tD��#̸?�YNލ����� t�b������]'�=oJ� 'n���2r���J+ɹ+��ఎ@�|��l�{���%�j��{��۫$�YCv�h$�V��@Ž���5�����w&/|�3��`6�q����l�H=���.�D۝Ztl��M�A��(y��}:��fK ��A�����΍�h�R ̀���f�:���s����}�����^P�^�����5 sq�lp$ώ��O��Sp�74k��[��Yb0�x���Ku��7{�Tz�
k�׹��5��#���186��OU �F���`��}���3��5<�>:�@H����8ȶ��T��
ZGIC�ɪ��e�6�mG�%��� ���C���8�}��&"Ȋ���([��4�i�� �n'9���v0�E 4�1�M�S��Q�f�f������q�o�\�������t�T�v���2�f|,����@�v�Qx�(���5��ڏo���K���L�^b5��{ׅ�$"����,aCd$d �j?Q�����ld�K�&{e��6��I#���̲����8@��kR�'j%�]fH p4v����kB�^_���&��,1H ��N�6i?�}����1��$pc�bi{�ׄ|2c$]��Pu���b�Y���_���#�ڏoe���I��~�m/�4�Ů~����w���DO1��!��,%���g@��D�s�E �#m/��(�1/=`��֐|f)��"��@���#`m�r� �9�i{I� �͌C���]1@�Y�%���������G�l��>��D�^iB��`� ic�Iא|f�Kt�v�I���}���_�$;��KF���D�e�l�3�R�Y�# �N���~��Qrܢ��͊���D���(�X-��~zj� /�%EF:��M+�3�@%���E��D�����bӬ���%^Vx
�V���X)���HT�`���'�"���H�"e�!Ӓ ��-\���>B� �<��%��%�&Dl�z�4c������:�+h�'�"�v��
���k�wi�Q�ںB2u �C��O�>��)��%�&�"�1
h&�_F�&_������\��SD�e���6��Bθ[]6�A@4i?Q� ���gXVi�P���yb�VƧ֮KH�s�}���MF�&v�ܪ��"���k����G�����&���D�1:��7��x�<��}6�A�q��7�� p2��p%�(�~��G�Ef�f�a{I� C���7oiI����m/��r���$m�C�/��]^2�����?������$҄���.�"�}��D�f�3��:0 ���xC�E���+32��.�~��Y( *��Pԭ��}�5]!'��J�/���h|�-SnRpb� �qr�Uz#�]w����G����$҄�-Jfx�Y|��ڠT�"#ǡ�������z�U� pr�c?����G����$҄V%3��,\���\n�xJ%���+�)X�K�c�u�i?Q�(T��D��Ң��>�/�|&.��H�����T�RUi�W2$+�l�]��d� De5�& ���f��' ��A'��tƕ�ߊN� t͈�]w���=�'T��D�0�<��<��r�uB6�:��)�"Q� ɪ6 [��i?Q�(���d�09ź�s���kAqœu��d)_ڐMf�Vex�!�~��Q�!k/�4�U�?���}k>�%��*�*��O�J�c�Ve��K���m��la�/��uҲr����ԕʴ!2&4�վ2�1���7r����&B�҂ZA�o�g��[>���F�����TS)+N�=*ʰ��Ve���$c�~J��2��&�
�ۨ뮺���F��*��j pm�׵��q:�]��׶� w� ]� ��!���ǧO�\��u0ݕ��R^�nW��9R�h Sv��#�'��
���;]*Kfp�l�_�O�P��µ���r����jCޕ�� ��l&
#M��0��#�����x#[t�&K ���r�i�)s�|��-p]I4�hܕ2�o6:��l>�4�l���í}�-\�,�Y�J�Enw[��E����_��(#��v�y�>$.Fv��&-\#��Y.3�J= �3d���M?�^8b��
��7(5d( �-lB�,���%�=� �nY',\��G]��������G���~.�v �Q_e�P�De5PY�"*���٠���U��\f����M\���[Z�^<�Ng�,� UWBօ�%.�NF�8�>!ôe!Jnp�,XWʖ��w qP�d�>tݯu1V@���I�%����-�*\�.��J�%l����麋�_�"f/)Z�:�ܩ��Ϫ ,e�7*r��]�ZM_����}'�{UyP� ���&����W�.�0U.3�J=�_��F����-a�N������S.�� ,��E����w�������E��7o�3���%�ʫH��&�PY7~�n�n�w+"4B������\fڕz��hw�ng�ۋ4}-�t{�L�x�S�у"��\} +����e�q.��<����E�ԥ���n�����tܝ�V�
��!&�uʚ���F ܃�3�0v>���� �yϨ���n��&<b�˕�?�\��7� z���X��E�)9k�����7_���u2� G �kN��--��J� Z�ni��FXk��\Js���ؙuLۭ
��@�=rxA}��t^+ݨ�}2ovI���ͅ����yd�6����Nwh��UN��� K�eA$4��vd�usơ�#:�(��:�+�:R�M����黑�����q��(�>���~�6n����\S��QP��1Ώ��� 5��s@�V�����l�ؚ��ޑ%��+�Ƒ���0}����0*�k�e�'n�*�`^Y�#�|�C#���T�l|{�� *�(�#���/V�: ���|��� z̀?��=�5V��3t�ǟ%� �H'�uN�xĿ')إ�� �>%��f!<hBÂ�I2֭�z׼�F�.�+6�⥐�ګY��(pQ�+�-tEXtSoftwareby.blooddy.crypto.image.PNG24Encoder��IEND�B`�
__author__ = 'daniel.madden'
__author__ = 'daniel.madden'
class Collidable:
def __init__(self, pos):
self.pos = pos
def update(self, dt):
pass
def draw(self, surface):
pass
__author__ = 'daniel.madden'
import node_map
import px_node
import pygame
import time
import math
from pygame.locals import *
class ImageNodeMap(node_map.NodeMap):
def __init__(self, pos, image):
self.image = image
self.pixel_array = pygame.PixelArray(image)
self.original_image = image.copy()
self.original_px_array = pygame.PixelArray(self.original_image)
self.rotation = 1
self.last_time = time.clock()
node_map.NodeMap.__init__(self, 263, 263, pos)
def set_px_transparent(self, px_pos):
self.pixel_array[px_pos[0]][px_pos[1]] = 0
def is_px_active(self, px_pos):
return self.pixel_array[px_pos[0]][px_pos[1]] != 0
def collide_point(self, point):
try:
return self.is_px_active((int(point[0]) - self.start_pos[0], int(point[1]) - self.start_pos[1]))
except IndexError:
return False
def rot_center(self, image, angle):
"""rotate an image while keeping its center and size"""
orig_rect = image.get_rect()
rot_image = pygame.transform.rotate(image, angle)
rot_rect = orig_rect.copy()
rot_rect.center = rot_image.get_rect().center
rot_image = rot_image.subsurface(rot_rect).copy()
return rot_image
def find_angle_to_center(self, point):
center = self.image.get_rect().center
print center, point
dx = point[0] - center[0]
dy = point[1] - center[1]
print dx, dy
if dx:
if dx > 0:
angle = math.degrees(math.atan(-dy/dx))-90
if dx < 0:
angle = math.degrees(math.atan(-dy/dx))+90
return angle
def distance_to_center(self, point):
return node_map.NodeMap.distance(point, self.image.get_rect().center)
def destroy_px_original(self, original_point, bullet_angle, radius):
displacement_angle = self.rotation - bullet_angle
distance = self.distance_to_center(original_point)
original_center = self.original_image.get_rect().center
y_distance = math.sin(math.radians(displacement_angle)) * distance
x_distance = math.cos(math.radians(displacement_angle)) * distance
pixel_pos = original_center[0] + x_distance, original_center[1] + y_distance
point = pixel_pos
point = int(point[0]) - self.start_pos[0], int(point[1]) - self.start_pos[1]
try:
x = self.pixel_array[point[0]][point[1]]
except IndexError:
return False
nodes_to_destroy = [point]
while len(nodes_to_destroy) > 0:
curr_node = nodes_to_destroy.pop(0)
try:
if (curr_node[0] + 1, curr_node[1]) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0] + 1][curr_node[1]] != 0:
nodes_to_destroy.append((curr_node[0] + 1, curr_node[1]))
except IndexError:
pass
try:
if (curr_node[0] - 1, curr_node[1]) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0] - 1][curr_node[1]] != 0:
nodes_to_destroy.append((curr_node[0] - 1, curr_node[1]))
except IndexError:
pass
try:
if (curr_node[0], curr_node[1] + 1) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0]][curr_node[1]+1] != 0:
nodes_to_destroy.append((curr_node[0], curr_node[1]+1))
except IndexError:
pass
try:
if (curr_node[0], curr_node[1] - 1) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0]][curr_node[1]-1] != 0:
nodes_to_destroy.append((curr_node[0], curr_node[1]-1))
except IndexError:
pass
self.pixel_array[curr_node[0]][curr_node[1]] = 0
self.original_image = self.pixel_array.make_surface()
return True
def rotate(self):
"""rotate an image while keeping its center and size"""
curtime = time.clock()
if curtime - self.last_time > 1:
try:
self.pixel_array = pygame.PixelArray(self.rot_center(self.original_image, self.rotation))
except ValueError:
pass
self.rotation -= 1
self.last_time = curtime
def destroy_nodes2(self, point, radius):
max_size = (radius + 1)**2 + radius**2
point = int(point[0]) - self.start_pos[0], int(point[1]) - self.start_pos[1]
try:
x = self.pixel_array[point[0]][point[1]]
except IndexError:
return False
nodes_to_destroy = [point]
while len(nodes_to_destroy) > 0:
curr_node = nodes_to_destroy.pop(0)
try:
if (curr_node[0] + 1, curr_node[1]) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0] + 1][curr_node[1]] != 0:
nodes_to_destroy.append((curr_node[0] + 1, curr_node[1]))
except IndexError:
pass
try:
if (curr_node[0] - 1, curr_node[1]) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0] - 1][curr_node[1]] != 0:
nodes_to_destroy.append((curr_node[0] - 1, curr_node[1]))
except IndexError:
pass
try:
if (curr_node[0], curr_node[1] + 1) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0]][curr_node[1]+1] != 0:
nodes_to_destroy.append((curr_node[0], curr_node[1]+1))
except IndexError:
pass
try:
if (curr_node[0], curr_node[1] - 1) not in nodes_to_destroy and node_map.NodeMap.distance((curr_node[0], curr_node[1]), point) < radius and self.pixel_array[curr_node[0]][curr_node[1]-1] != 0:
nodes_to_destroy.append((curr_node[0], curr_node[1]-1))
except IndexError:
pass
self.pixel_array[curr_node[0]][curr_node[1]] = 0
return True
# try:
# if not self.is_px_active((point[0]-self.start_pos[0], point[1]-self.start_pos[1])):
# return False
# except IndexError:
# return False
# point = point[0] - self.start_pos[0], point[1] - self.start_pos[1]
# points = self.find_px_in_radius(point, radius, [])
# for p in points:
# self.pixel_array[p[0]][p[1]] = 0
# return True
def destroy_nodes(self, point, radius):
try:
start_node = self.nodes[point[0]-self.start_pos[0]][point[1]-self.start_pos[1]]
if not self.is_px_active((point[0]-self.start_pos[0], point[1]-self.start_pos[1])) and start_node.destroyed:
return False
except IndexError:
return False
nodes_to_destroy = [start_node]
i = 0
while len(nodes_to_destroy) > 0 and len(nodes_to_destroy):
curr_node = nodes_to_destroy.pop(0)
for x in curr_node.neighbors:
if x not in nodes_to_destroy and node_map.NodeMap.distance((x.pos[0] + self.start_pos[0], x.pos[1] + self.start_pos[1]), point) < radius:
nodes_to_destroy.append(x)
self.pixel_array[curr_node.pos[0]][curr_node.pos[1]] = 0
curr_node.destroy()
i += 1
print i
return True
def destroy_at_pos(self, pos):
self.pixel_array[pos[0]][pos[1]] = 0
def make_map(self):
ide = 0
for i, w in enumerate(self.pixel_array):
self.nodes.append([])
for i2, h in enumerate(w):
n = px_node.PXNode((i, i2), ide, h)
self.nodes[i].append(n)
try:
n.add_neighbor(self.nodes[i][i2-1])
self.nodes[i][i2-1].add_neighbor(n)
except IndexError:
pass
try:
n.add_neighbor(self.nodes[i-1][i2-1])
self.nodes[i-1][i2-1].add_neighbor(n)
except IndexError:
pass
ide += 1
def update(self):
self.rotate()
def draw(self, surface):
self.image = self.pixel_array.make_surface()
surface.blit(self.image, self.rect)
if __name__ == "__main__":
pygame.init()
i = ImageNodeMap((0,0), pygame.image.load("../../assets/images/asteroid.png"))
s = pygame.display.set_mode((800,600))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == MOUSEBUTTONDOWN:
pass
#x = i.find_px_in_radius(event.pos, 4, [])
#print x, len(x)
s.fill((122,122,122))
i.draw(s)
pygame.display.update()
__author__ = "Dan Madden"
class Node:
def __init__(self, pos, ide):
self.neighbors = []
self.pos = pos
self.id = ide
self.destroyed = False
def get_id(self):
return self.id
def add_neighbor(self, n):
self.neighbors.append(n)
def remove_neighbor(self, n_id):
for i, n in enumerate(self.neighbors):
if n.get_id() == n_id:
self.neighbors.pop(i)
return True
return False
def destroy(self):
for n in self.neighbors:
n.remove_neighbor(self.id)
self.destroyed = True
def draw(self, surface, change_in_pos = (0,0), color = (0,0,0)):
if not self.destroyed:
surface.set_at((self.pos[0] + change_in_pos[0], self.pos[1] + change_in_pos[1]), color)
__author__ = "Dan Madden"
import math
import pygame
from pygame.locals import *
from src.destruction_nodes import node
class NodeMap:
def __init__(self, width, height, start_pos=(0, 0)):
self.width = width
self.height = height
self.totalNodes = width*height
self.nodes = []
self.start_pos = start_pos
self.rect = pygame.Rect(start_pos, (width, height))
self.surface = pygame.Surface((width, height))
self.make_map()
def collide_point(self, point):
return self.rect.collidepoint(point[0], point[1])
def make_map(self):
i = 0
for w in range(self.width):
self.nodes.append([])
for h in range(self.height):
n = node.Node((w + self.start_pos[0], h + self.start_pos[1]), i)
try:
n.add_neighbor(self.nodes[w][h-1])
self.nodes[w][h-1].add_neighbor(n)
except IndexError:
pass
try:
n.add_neighbor(self.nodes[w-1][h-1])
self.nodes[w-1][h-1].add_neighbor(n)
except IndexError:
pass
self.nodes[w].append(n)
i += 1
def destroy_nodes(self, point, radius):
try:
start_node = self.nodes[point[0]-self.start_pos[0]][point[1]-self.start_pos[1]]
if start_node.destroyed:
return False
except IndexError:
return False
if not start_node.destroyed:
nodes_to_destroy = [start_node]
while len(nodes_to_destroy) > 0 and len(nodes_to_destroy):
curr_node = nodes_to_destroy.pop(0)
for x in curr_node.neighbors:
if x not in nodes_to_destroy and NodeMap.distance(x.pos, point) < radius:
nodes_to_destroy.append(x)
curr_node.draw(self.surface, (-self.start_pos[0], -self.start_pos[1]), (255,255,255))
curr_node.destroy()
return True
@staticmethod
def distance(pos, pos2):
dx = pos[0] - pos2[0]
dy = pos[1] - pos2[1]
return math.sqrt(dx**2 + dy**2)
def draw(self, surface):
surface.blit(self.surface, self.rect)
def main_loop(nmap):
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
return
if event.type == MOUSEBUTTONDOWN:
nmap.destroy_nodes(event.pos, 10)
surface.fill((255,255,255))
nmap.draw(surface)
pygame.display.update()
if __name__ == "__main__":
pygame.init()
surface = pygame.display.set_mode((300,300))
nmap = NodeMap(150, 150, (100, 100))
main_loop(nmap)
__author__ = 'daniel.madden'
import node
class PXNode(node.Node):
def __init__(self, pos, ide, val):
node.Node.__init__(self, pos, ide)
self.val = val
__author__ = 'daniel.madden'
import pygame
import math
import src.tools.vector
class Bullet:
def __init__(self, pos, click_point):
self.pos = pos
dx = pos[0] - click_point[0]
dy = pos[1] - click_point[1]
dist = distance(pos, click_point)
velocity = src.tools.vector.Vector(-dx/dist, -dy/dist)
self.velocity_vector = velocity
self.speed_factor = 100
self.rect = pygame.Rect(pos, (3,3))
def update(self, dt):
self.pos = self.pos[0] + (self.velocity_vector.x * dt * self.speed_factor), self.pos[1] + (self.velocity_vector.y * dt * self.speed_factor)
self.rect.center = self.pos
def draw(self, surface):
pygame.draw.rect(surface, (255,0,0), self.rect)
def distance(pos, pos2):
dx = pos[0] - pos2[0]
dy = pos[1] - pos2[1]
return math.sqrt(dx**2 + dy**2)
__author__ = 'daniel.madden'
import src.tools.vector
import pygame
import math
class Ship:
def __init__(self, pos):
self.velocity_vector = src.tools.vector.Vector(0,0)
self.pos = pos
self.rect = pygame.Rect(pos, (30, 30))
self.speed_factor = 2
self.direction = 0
self.sprite = pygame.transform.scale(pygame.image.load("../assets/images/red_ship.png"), (25,25))
self.original_sprite = pygame.transform.scale(pygame.image.load("../assets/images/red_ship.png"), (25,25))
self.rect.center = self.pos
def update(self, dt):
self.pos = self.pos[0] + (self.velocity_vector.x * dt * self.speed_factor), self.pos[1] + (self.velocity_vector.y * dt * self.speed_factor)
self.rect.midtop = self.pos
def rot_center(self, image, angle):
"""rotate an image while keeping its center and size"""
orig_rect = image.get_rect()
rot_image = pygame.transform.rotate(image, angle)
rot_rect = orig_rect.copy()
rot_rect.center = rot_image.get_rect().center
rot_image = rot_image.subsurface(rot_rect).copy()
return rot_image
def face_point(self, point):
dx = point[0] - self.pos[0]
dy = point[1] - self.pos[1]
if dx:
if dx > 0:
self.sprite = self.rot_center(self.original_sprite, math.degrees(math.atan(-dy/dx))-90)
if dx < 0:
self.sprite = self.rot_center(self.original_sprite, math.degrees(math.atan(-dy/dx))+90)
def thrust(self, pos):
dist = distance(pos, self.pos)
dx = pos[0] - self.pos[0]
dy = pos[1] - self.pos[1]
self.velocity_vector.x += dx/dist * .1
self.velocity_vector.y += dy/dist * .1
def draw(self, surface):
surface.blit(self.sprite, self.rect)
def distance(pos, pos2):
dx = pos[0] - pos2[0]
dy = pos[1] - pos2[1]
return math.sqrt(dx**2 + dy**2)
__author__ = 'daniel.madden'
import math
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def add_vector(self, v):
self.x += v.x
self.y += v.y
def get_magnitude(self):
return math.sqrt(self.x**2 + self.y**2)
__author__ = 'daniel.madden'
import pygame
import time
from pygame.locals import *
import src.destruction_nodes.image_node_map
import src.player.ship
import src.player.bullet
class World:
def __init__(self):
pygame.init()
self.surface = pygame.display.set_mode((800,600))
self.node_map = src.destruction_nodes.image_node_map.ImageNodeMap((100,0), pygame.image.load("../assets/images/asteroid.png"))
self.ship = src.player.ship.Ship((200,200))
self.mouse_pos = (0, 0)
self.last_update = time.clock()
self.held_keys = []
self.bullets = []
self.main()
def main(self):
while True:
self.event()
self.update()
self.draw()
def update(self):
self.node_map.rotate()
self.ship.face_point(self.mouse_pos)
for x in self.held_keys:
if x == K_LCTRL:
self.ship.thrust(self.mouse_pos)
currtime = time.clock()
new_bullets = []
for b in self.bullets:
b.update(currtime - self.last_update)
if self.node_map.collide_point(b.pos):
if not self.node_map.destroy_px_original((int(b.pos[0]), int(b.pos[1])), self.node_map.find_angle_to_center(b.pos), 5):
new_bullets.append(b)
else:
new_bullets.append(b)
self.bullets = new_bullets
self.ship.update(currtime - self.last_update)
self.last_update = currtime
if self.ship.pos[0] < 0 or self.ship.pos[0] > 800:
if self.ship.pos[0] < 0:
self.ship.pos = 0, self.ship.pos[1]
elif self.ship.pos[0] > 800:
self.ship.pos = 800, self.ship.pos[1]
self.ship.velocity_vector.x = -self.ship.velocity_vector.x*.9
if self.ship.pos[1] < 0 or self.ship.pos[1] > 600:
if self.ship.pos[1] < 0:
self.ship.pos = self.ship.pos[0], 0
elif self.ship.pos[1] > 600:
self.ship.pos = self.ship.pos[0], 600
self.ship.velocity_vector.y = -self.ship.velocity_vector.y*.9
def event(self):
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == MOUSEMOTION:
self.mouse_pos = event.pos
if event.type == MOUSEBUTTONDOWN:
self.bullets.append(src.player.bullet.Bullet(self.ship.pos, event.pos))
if event.type == KEYDOWN:
self.held_keys.append(event.key)
if event.type == KEYUP:
self.held_keys.remove(event.key)
def draw(self):
self.surface.fill((255,255,255))
self.ship.draw(self.surface)
self.node_map.draw(self.surface)
for b in self.bullets:
b.draw(self.surface)
pygame.display.update()
w = World()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment