0001101010010010001001010001010000100100010001110000111000111000100100010101101100110010000100111011110011010010100010000111001110011000001110100010000110011010101000010100010010011110100001011101100001110001111010101000110110100111010001010011001010001001100001111010011011000011100001010001101101011111101110011110101100100110101011010101110010110110001010000111101011011110001100111110000111000100 0011000110111001101111101011100111111011111011011010010000111010001110001001110100101001001100001110111001011101100001100011101010110100000010000100101001110100010100111101110111111110010001100001110100011011010111111110010000111100111101110011101101101110010100100111011101100011111111011001111110011011000011110000110011101101111111111011011110011001110111100010010100010011110000000010101101100000 1101100111111000011010001001001100111010000011001110101000110100100010000011000001000011111111101011011011000100100110011110001100001001111101011001110001111101110001010001011000000101100010110001100101000000011101111100110011111100111111100011110101000101000101110110110100001000010001110100010010101011101110001010010100001111101011110000001100011001101010011000010001001111101110011000000001101011 0000011010111111000100110001100000101110000100110110010000001110111101110111000001011001111101001100100101000101000010100111100100101001001110111100011101101001100111010100100110110000001110010011100100111101100101000000011111101110111111100010011001000010000101110011100000110010011011010001010101001011100001011101000011100100110000111010000011010011010010010011001000011110010111101011101011101100 0000100001010001000100000011011011001111110011010111000111011110100110110010110000010001101100010101000101111110101101010111110110111110110101001010111010100001001101100000000101110000100000001000010001011010110001001100111000001101100101110000101000000111001011000110111101010111010110100111011011000011110011011010011000101001101101101100101111110111101101001010111011011100110001011011000011101111 1101101000101111010111000000010110110001101100000110011010110000011111001111100111000011100101010011011000000000111001001110110100010111001110000110010100110001110010000101010000110111011001010000111110101010100000011001111010110001110011110100000000100101111111110100111101110000011100110110000110011011000011000101110011100110111001001110000010001110001011010100000011000001110111001100001111010110 1101001110100101110100000011001100010010100010000101010110010010100101001001101110011110110110011110001011000110111010000010000110010110001110100000101001001111101100110001111010111100100110110000001010001000100010111001000000110001001101100101000000011010011010101100111111111101001111111100111001100100101011111110011010100100000000111111101000100111111100111110101011011010001101100001101000011011 0000010001011000010000111000101011010101101011010111010100110010101111111110110010101011100101010010011110110001110100010001111000111001010000110001010110110100100101000010111111011010100110011101100011001100110010100101110101011010100101111000011010110001110110110100001110111101100000100100110010111101100001101011001000001101110100101101110110010101011111011001111000101100101010010111100011100000 1010100111001001111011010010010111110110111101101110111111000110001100011110110101010000111100110000100001000110011100110001010011100011001100110011001011000101110010111011100111101011101010110010111010100111100011001111011001011100101011001000101110010110010101101101101100110010000011101101001000011001000111101100000011001111001110000010101010110000000010101110111110111111001111000000001011010111 1001001000101010011010000100100000010100110101110001101010110110000111001110011100110111001000010100011101110110000001001100110111111011011010000110100000011010111010111010110001101100011100010110001010001011110100110000010100010011001000010000011111001010110011000111101101100011101111110101110011000001000010010110100101010111010111111110011011011011101101011011100010101000101110000001001111100111 0100000010111010110110011110111011000010000001010000101010011111101001111011111100011101101111010000000000111100110001100111100010001011111111000000111100101101001101101110110010110101110000101011010010100100010111100011101011100001001011011001110000111110110110000010101000100101000010110101111000111000100000011000001100010101010100011001001000001110101011000111101000100111101100000001111010110110 0110000111110000100111111100110010101100010010001001111001101001100010110111101101110001100101111000010101011000101001101100100001011100110100000001010011101000001000101100111101101100110000010000111011011010110001101110100001001010111111011011100010001001000011001000100001110000111010110010010111000111110110011000010001000011100001101111110110000011001111110101100111010000001110000101000000001010 1111000110100011000001101100011110101011010000110010011100101101110110011100001100110001110000111101110111101111011101000111011000001001100111001011010101101010101101110101101101100101111100001000001100110001101011001000000010010100101110011001111100011001101001101111101111111011001010111000100000011010000011110110100000011000010100000111011011111001010110011000010111110100110111110011011110011010 0010101000111010000001101001111011001111101100000000001001010011000000001101100001001001110101111011000100101011000100011000000100100110010101101011000011101101100001000101011110000000101100001011100001110001110010110010001100100101110111101000000101100101000010000001001100010000100111101000001110001000101000011111010000110111001111001010001010011110001100100001010110000111001010000110110101010001 0101001101111011010001011010010100010100101101110010001001100001001110011110000011011101001000101111001111110011101011101001101111110111000000101110110110010011011000110101000011011010111011111111000010000110010011000010011111100111110101011100110101000111011000110100011110001011000111110000000001001000001011011011011101100011110101110101011110101100101001110001111011010110011110001000011010011010 1111100111100011010110111001100111000101011010011001000110110111100101010000011011011101010101100011100001011110000100111100000101000000101000111100010011010101110011001101001100001001011000101100101011110111100010010101010100010101101001111000111101010011111111111110110100101001010010010100000110011101111010011011100110110101011000100110000011111011101111110001010101101100011100100111000100101001 0100001110101001011101111010100101000110010111010110101001100001111110100001010101101111011011110001110001110000010100001011010011111011100011100010011100110101101010000110111100110100101110001111011011000111010110100010111011010010011001000000010011100011010101111010111110010101111100100101100100101100000111011011111110110101010001111110001100010001100111011110110111100100111011111111101100110111 0001010001110001000111110100010010100001101011110010000111001110010000001000110111111111010010111110010011001110001111100100011000010110000111010100000011000101101010001011000101000010011001001010101110010011000100101000100000000110100000000100100111101001011101111110010001001110010111100100111101001111111101011100010111010000110111001000011111011010001011101010100110110110111110111100001110010010 1101010001101100111011110100111101111101101010100111101001101111111011101010111010001000011110111000001010001101110111110001010110001111010111111100010110001011010111111100100100101000100110101001001110000100000100001010001000010100110001110101100011101010111010000000001101001001111101001010101010111010000100010100110010110011010000110110010101100111110111011011010100111010100100000011010100001010 1111000100101110000101110010010101011101010001001000000100110111001011001000100011010000101101100001001000000001011000000111101010001000110001010101111111100100100010001000110011001011011000010100010100110110101100010001111111110110100111010011111001001011000111000110111101111110011100100110111010110101000010111111000001111100110110011000111100001100000100000000010011011011001100010110011001001010 0000100001000110101111011011111010011110000100110100100000000001101000000111100011000111001110011001101000100111011110000011100000100100011010010100000001100101110000111000011001001101110100001111111000100000101111011111111001010101011010100000000000100101100100001011010011100000010100000110011000001110111001101001110001010010001000111011011110001011000000011101100010011101011101010110111111100101 1111100111111101111100100011110001000111110001010111000101011101010100000110000111000010011100111111111010111100011101000100011110101111011100000001110011111100010101000100001100110100111100001101110011001110111101110111001011000010101110110100001001010110000011010111100100111100110000010010101111111010111010111001111110110011110101011111111100000111100011010000000000100010001001001111101111011111 1001110101110010100001011100110100101010100001110000111000111001111101000111010101101000110101111000010010110110100110000110011100111110101000001110011010011001000110010000010100010001000110101000111101101110011001101101110001111010000100101010111110000100000111010111000110001101101000000100001101011010110100111110011100011100001111011100101010100101110110101001011111010100101011001100010000110101 1111000011011010000101110011101101110011000111011101001001011001000000101000111111111110100111001110011110110110110001000000111001100010110110100110100001111010000011110101101100001101001011111010010110101000001100001011011001110111101010000101010011010010001000000010110100110000000100000000101001101000101101000010000101010000010110110101001100101001001000010101001011000101011110011001011100001011 0110010011011101000100011110000110001100000100100111101101010111101111011111010011011001101011101010000110011111101000001001011011110010001000000101100110110100111000010000111110110000010010111110011111010111010101010111101110111100011011011111000100100100010010000001110110100001001111111000110111101110110100101101011000100100111100000011111000100011011000001100110001000000100111010110111101000110 1100000111110111101000100111001101111000011010000110101101001001110010000111001110000111111101110011011000010111100011111110100101000000011000010000010100000001010100000110101011100011010000101011110010011111000110110001100100110010100111000110011010100001001000111111011110000110000010110100111111001011011011100010100111011010001101000111101000110000010110100001101101111011001010111000100001101101 1011101011010000011000101110111110101000100011111011110110110111100101111101001110111101100101011011010100101111011100101111010010101101010011010101010111001001110001001111010110001001011011010000010011110101010101001011100100011111000100100101101011111000000110111100001110000010101010100110111101010100100011111000001011011010010011011000001010100101111001100100101001101111010110010100000111111011 1100111011110111110111000100000100011100111010011001000101000100100011110001100000111000100000100111001110000110101010111101010001001111010011110001001110101100000110101001011000110111110101110011101111010110011000101101110101111001100110110100110100111000011000000011101011110110111110100111101101000011001000110111001110110100111010000100101110010111101100111111111101010100110011000001100001110110 1101111011010001100010000110110001111110110010010010111110001011100001101000100100110111010111011001001101000110010001010001111111101000000111011011011011100000100111110011111000011000000011111000100001011110100001110111100011110011000001110100000100111010000010111000110001001111101101001001111111011000000101000011100100010110000001010001110011010001101001110001110000011010000001010101100110101111 1011001011101011100000101100011001111111010010101100001101010011011010110111010010101001001010000000010011100011011000000101101110101111111000011011101111000000011011110100110010000011001100100101001100101101101001110010010100111111010011110111110111000000111001111011111000111101011001001111101100110111111110100011000001000010101101100001001001011111000100110111001101101011101111000011110100100111 0011010011110010100000010001110100110111101110101010110010001000010111010110001011000110100111110100101011110100001100111001111010101111101100111110100011010010000101111101010001010000100110110100110110101010000011100101110010001000100101100110110010100011011111001001100110001011101110101100110001010101100100000100100111101001010011101100101010001010000000111110111001110001101111000011101010110110 0001111001101110001001011010111010000101001001100000000111000010010011101011001011010110010100000100100100011111111100101011000100000101101111101100001000010100101100101011101111111111000100110000110010110101000010000110101001111100010001100101010000101001001011111101010100110011011100101111010110010111000001111011001100101110111000000011101011001011100001111101001110110101011110011110000101010110 0111101111110111111001111001100000011010111011011101110001111011111101010010001010110010111000110111110110101000101010101011010001110000010000001000101110010000000000101111110111011010000110110010001010001110111110001110111101110100000011111110000010111000000000011110110000100100101010011000000110100111011110010100110010010001011111100010101011011100010101100010110111111100001000100111000101001101 0101001000010101111110101000110100100001101001110000010011110010101111000001010000100011110100000010111001110100111111100011101001111011111011000001000111100011101001110100100011011101110111000001001110011011101000111110100100000100011010110011011010000001011100001100001111000001000001101111011101010111010000001000011001101111011010010101100000011111001100110100111110110100011011111110100000011110 0110011111111010011100110100010000101100111111101100101101010110100011001100011001010110100110101101111010101100010001100001111101111011110010000001000010001100000100001000111000000000111010010100100100011100011010110110010101101001100001000011101000001011111101101001011111101000101010010100001101100100010001100101010111110111100111111110100101101000000001111010011111111001010111010011111000011011 1010100000000101011010011000111001010000111110010010101101010101110100001100110001111111011111001010110001011110010000011111101010000101000110100011100000001010110001001001101111100111111000110011111011010011101111000111111101111110110111001001010011110001010110100000110110100101101110110100100101110110101110001001000110010100011100100111100001010101101100100111010101100011011101011011000001100110 1000011001110000001110000110101000000001011110100110110110000101000111110100101010111101100010101110011110011010000000111100010010100001011101011000001011010001111100110100110011010001001111001011101011000010101001001010101101100100000000011110000010101101110000100110000101101010100010101100010111110111000010011000111110001100110110011111111001010001010010000100011100010110111001100100000100101001 0011100001010101110010100100101101001010111001100101001110101011011100100110010110000000000110010001001101010010000001111110100110001100001110100110000010111101110100000111001000111101011001101110010000100100000110000011001000110101100001110101010000000101111111110010011010100011010111100101111001111101100001010100110010101010010100000110001101110111100001111101001001111101111111010010100010011010 0000001110100011100111110001100110010001010110011011111001001001010001011100101000101111000100110010101000101011010101000101010010000110110010001000001111100010101101111101010001111010111001110111110011111011110011010100000100101000000101100010100010011011111110110100111110110111011101101011011110110000100101011010010001110100000101100011010110001010100001001000010111110000000101000101100110111010 1010111000011101101111001001001111110101111001000110010001110110110101100101100100010101000101101010000101100110101101110101000111011001001010111000110001010010100110010000110001110000001101100010001011101111100100010001100110010101101100101100110101011101010011011011011011100000100001111010010111100010000001101010000011000001110100010101000111001110011100101101000011101111111101011011010001100101 1100101000000110011101110111000010101001011111000001000100001110010111111011000110011010100111101111001001010111010010001010100001000110010111111001001010111101100001100101101011110111111111010000011010011100101101011100011111001101010001000111010010010110011010010110000111110101111111001100110101001111101001001001100011001110010101000101111001110011111010111101100110000001101110110110100110001101 0001110110011101001110111110110011110011011111010010100110000010110110011011000010010111010100001011110001100100110011001000001010011010011000001000110000110110000001010000110000100001010101111110010111100011101110110100110111001010011001101011111001011100101101111011111000010110101101111100001101001000111110011010011111000010101100001110111110111010110101101000001000110110000001100110000000110011 1110010011010011000100100011001100000110010111001001100001011011111000011111010100010001010100111110100010111000011001001100000111111011001101100111111100000111100110001000100111100011111101000111011111011011010001101001011000111100110111110100000110110001010110010010000011001111011000010001110001110010010010111000100100101111011001110111010010010110100100000000101010001011010110010101000001100100 1101110011001101001000110000100010001001100110100010111111000010110111000011011100101100111001000100001100000101101110001101011000100110100010001001010111101011111000101100101111100101100010010011110001001000101111010111110111100110110010000111110010100011101111110011011001010110011110101110011011000011101001101100010010010111101101011100100010011111100101101011010111101010111100101100000000100100 1110111000100011111100100101010111110010111101111101000011111111111100010010111011001010011010010001100101100110100111011001100010010010000101011000000011110101000000011111100000110011000001001000101110100011111011001001110000110011101001111000111011000001000000100011101101110100100101110010111011110010001111100100001101011011111101100110100101101101111011110001101000110001000101100011111001111000 0001100000000001001000110000010011010001101111110101001011101101111100101110010011010000100000110000001011000111100010101111010010010011111001011011111010101100101010111011010101111000100101100011010010101101100000100011100000111111101100111000100111001011010100010000011111011001011100000001100011110010011011110001100011101010100111001010100001111001110100001001100110011101010000000110111100100001 1110111100101101011010011111010100100010110011100000110111001100101110000111001001001101000000011001110011000010001100111010100001010010110011000111110010010101001111001100011000100111001111111101100011100101011000011100101010010010000110101000011000101101010010011000110010110100111110001010011011100101010101010101100011000000111010100110111010010101101000011111000011011010010000101001000001100011 0110011110111110111001100110101111001111110110111111101100100100111011111001111100001001001001100101000010100011010001000100000000110010101110101101100010001110110010011011100010110100110101010001000111101111111001010100011011100111001101010111100111000010001010010010000011111010111111011101111101011011110110101010110001110000010100001010100010001101010000010011100100111110111011111011011100001000 1111111000100110101100011011010011000110100000000011001001011111101110011000000101110001001001101101010101010000011000111000010100001011011000110111010011001101111101110010110010000010101000111110011100011111000001110111100100001000001001110011110101010000001110001011001000010011100011110001011111101110000111110001010110010011000110100101111111101110110011010101111100101001111001000110110111111000 1100111001011010111100111001101000010011010111011101111000100000000010101100000011101000000011111100000110111011000111011010001000010001100111111010000111010011011001111111100110001000101001001010110011110110010000111011000010101000101001010001001010001100111001011101100001101000100001001010110001001101010000001111101100111100111000001101000110011110111000101111011000100000100110100110011110101010 1000100100100111101010111101000111101001000110110111011010011101111111011001110101000111111110110111100101010001010110100110001110100101010111100010010101110001011101110101111101001000110111001001101011000010111111100010010000011000111001110100100111011100000011110110101001011000000111010101100011100010111000101010110110010111011011101110000101000010010100111110011001000010110101000001101111001100 0011101110000111010011110111010011001011101011100110011111001101001100011111101011011001101010000110111011100000100101000100101011001111011000001111011110100110111000011101101111010111110000011111010011011110100100000111110010111111001000110110000100011110110101110001000110110001101000001100101000010001010101101000111101100011011101100110111111100001111111111101011111011110111011000101011001111101 1100000010011101110111000011100001100110100011001110000101100010010100111000011101001000101111001011011110101001010101010000110000101100000111000100001111110101010100001010101001100111101001100100000001111100000010010111001111011110111001111101110101000000010011010110100111111101101110010100011111110110010100100101011010101011100010101101001100110100110111100011000000110100111001100101010110100100 1101011111100000110111110001011100011111010001000101101010101011010100010011000011010010010110110101100101110100011010011100010000100000000000111110011000100010001010010010110010111101100110101101001100110000000111010110000100010101000101011111101111110011011111101110100011010011111101100000110010111110110010110001100001011101100010110101000010111110000110111000111000000110110111001111100000001101 0100000001111011000010011000111011011111001111101000101011000110110111101010110010101110101111010111101100000000001101100001110010100110101100101011000110011010000001010110111101011000110001000010110000001100010110110100110001010010000110111110010100111101100000011111010110001001101010111100000001110010001111011101010111000010011101001011001000110011010100010000000111100101100000100111101111000001 0011101010001011001100101001101001000010010010011011101111011110001010110110011111011110000001101011010111001110011000110010111010101101010111000011100100111101000001000010001111100000100100111100111001001001000100110110111010010001000011011011011000001100000111111010110011101100001100011001010000011100010010000111011010110101000010111001000100011111111011001011011001111001010111101100010010011111 0001000001101010001100111011000000100000011100111101001001110101001110001111001011001100010111000011011011010110101011011010000011101110101101111011110010110111100101111110001110100000101011010110000101111011000000001110001100001110100101011001100100111011011111010100101101000110100111100000101101111001101000011101100000000000000111011011110000010111001110110010110110111001000001100100100010000110 0110101011101001101010011110011101000110010110001000111000000111011011100110001001111110111010000100111000101001111010110010010110111100100001100111110101011101010011101111101000111101101000001000000111000100011110011111110100000000100100100111011010011110110010100000110011001101111101100100110100101000101011000001000111000000010001101000011010111001000110110101110100011000000110011101110101111010 0101101000100001010010000111101011110100010111001011001100010000011111100111101000111010001101010100100111100001011111000100010110101010100111011110100001010100100111000000111101010100010110100011010001101100110100010001100100010000100010101010010011001001110011011011011010001111011111111000100110010110110111010100001110101000010011110111000111000000111001101001111010011101110001111100001110101010 0001111010010000000011110001111010111111110011000100011000111100111101101011001000000111101101010010110001001010101000111110011000101111010101011010011111110011100111000110011111101011101111100010011011010011100010100111010101110010010101000111001000010000110101101110010001010001100011011111110110011100100011001000100000010010110000100100101101010010111111001100100000110101110001011010000101100100 0001110100010101011100010111100101011011001011010110111100001000011100011001111000001101000010100101110000111000011101000111010000001001001100000010110100010110011010100100000101000000011000111111011111110100010011011110111000001011010111011010010110110000110010101001000101001100101100011101000001100111110101010000011111111111000110111001100100100111001101101110001000011001100101111101011000011010 1100010010100001101011010101111011001000111110000100110111110010100111000011100010001001100000100111111010001001110111100011110101100010001100000001111101110110101011100000111100010010101100100011011011010011000100001111100101100101110000000110111111100001100111100110110011100010001001111001111111110011000110010100011111010110111100100000110111100110100010011111001101110101001110100000000001000010 1101101010000111000100101111101010101011100000100111001101110000110010010110111010100001000111011100011100101101100101110011101101000010100101100000001110110100111011111100010000100101000010111011101111111100100000010011010100111011110001000011010100011101100011010001010000011001100001111111110010100001011000101110110111001011000110001010111100100101001110100101100100100001011001110100001100101110 1011001111011110001011011001001100001010110010111010011100001011111100111001000000101001101110011100000111001110100000110100111110101001001000110100011011000111001010010100010000010100001100101100101010010010010101001000010000101101110101110010001011110100011000001011101100110111100010010011110011011000100011001011111101111100101000101100011010111100100000001100011000000001100101101000011101110110 0001010110111111100101010111100010001101001001110101000000100100010010110111001010001110011111000001100100100001101110101011111100000001010101100111000010111101010000001000011011110101011100111100100011100111000011110001100011011100010010110110110111010000111010000011111101101000101010010011001100010001100000100111111111110010011010001110100011101001110001100110001100011100000011100010011011011000 1000010010100001101100110010110111011101010111100100010101100111100101010111011100101011101101001001111100000010100110010010010000110001011100000101000111001101100100010001011001111000001111111001101010000001101011111111011010010101110001111111110110000011110000100000011111110111010010011101110001011011010000111111101010100000000101100000001010101111100110101000010010111000111110001001100000011101 0110010010010010010100001111001110000001010011001001011000001100101101110001011101100010101100011100010000011100001100000111000000110001101101100111011010111000111110011000100010100101000001001101110000100011100101111100000100001101000011011000101001000101111101000010010011100001100100101001111000100010001001000101010011010111000011101011100000100001000010110010001011001011111011011111011011101110 1111111111010100101011011100010011001011110011110010110110011010000010000010101111010010110110110100000001011000011110001111100100011111010110000101010111110111001000011000100100011111001100110111101110010000011011001011000000110010101001001101001011100110011101010001011011011111001010110111100111100011101001100010110000010010100110100101000100101010110000110011000011100001011011101001001111100000 0001110110001010001101110101111000100101100001100101011000001010010001001001010001011000001010110100110001011010000001101011100000100100110001100010100100100000000111111111000000101101111000001011100001100001110111100101100001101001101101100100010011011001111101001110111111001011100011010010010010101100110110100101110001101101101010111001001011111111001101101101010100000010100110101100100000111101 0110010010000101000010111100010100001110100101000001110111010011001101111110000000110101000110101110111000101000010101111001010001110000100100110000001000111111111101100100000000010000001100111101101010100001011010100100111010010010100111101011010010001010111101101100010010111010010000001001100000010100000100110100000001100111011110010011001001011100111010100000101111110100110110111111011010010011 0000101010101000011000011111100111110011011001000010101110001101001100010101101010010101100100111101110101010110000001010111000001101010111000001011001001110011111011111011100111000000110011011111101110110101010001010010101010110010101010111000001010110101100100010001001101001100001001110011011110110010111100011100110001110101010010100011001100101100111011110111101111001000001111111100110000010110 1111101101110101101100001011010110101111011000101111110100010110111011111011100010010101011010001010111110101110011111111000111010010010100001101000011101001010000110011001010010010110101110111111010001000000000001000000111100010110000110101000111100110110100101011000101000111111110011100010110100101010010111010100110010110100101001101101110011000010011010010010100100010000010101100000100000010011 1001101100111100111001111110011100111111000000100011011010110111001101001010100111100000000111000010100001111010110101001011111011111111111101110011001000011100100110011010001001000110010000100011001001101010000101001110010010111100001100010100000010100000001001011110101000100010100111011111001101101000100101000000011001111010001010001110011001110010001011101001001110010010100111111110110101101001 1011101101001110110010010110011110101000111011110001000101010011101110101111110001001101000011010101001000111010100110110101101110110100010001001111101011100111011111010101000100000000000000000001000011110110111010010000111101011110110000100001001111111010000010000010010001011110110111111000000111000010111100110101011111111100001000111011000011010000000011101010011101100111111100001100101100011010 0101111000011110001110010110100111010111001111100111101101010000011111000001110111000010010111010001101110010001101001001010000001110110111011011110110000000100101010111011001000011000110010011110011010111110111101010011101000110101100110010010001110010110001100111100111001110110111010010100000010011100010110100110110111001101011111110001101010111011101000110110111001101110111110000011100011111110 1000111110101111101111101011010001111110001000010110110111110001001101111100000111111001000000100111001110010001101100110111000010100100001010100010110000010001101010111011011101101100100100011000110001110010011100010000011100001101101100010001100010011100000111111101011100110001000001001000010001101001010011101000000100010111011011000000110110000101110101100100001010110100110011110011110100000100 1101011010001010110101000000110000100111000001010010100001100011110111010011000001110001111000100010010000101011010111101010011100101000010000100101000001100100110111110110111000011110011011000011111001100011011100110000001001111000110010110001101101110100110110101110010100100011001011001110101110100011110110000100000101101001100000001110100000010100101000111111101111010100011101100010111101011001 0011000110010011100010001000011001011010001101111111101101111001010100111100000100100011010111101010101110000110110111100000011110100101111111110001110010000011001101111001010000100111101101011010011101110011100000100010110001100000111000100011101101011101010000100111111010011111011000011110001101000000000100101100100011110100010011011101000010101100100100100011100000110001101110100011101100001000 1100000111010111110111100110000100111100100001100101111001111111101011011000001111100111011001010111111001001100011101000001011000111101110001010000100010000111101110111110111011100011111001100111111101000000110110100110000111110111000001110101010000100100001001001001000010010111000000001100000011111011011000100100111001111101100111011010001111001011001000101100010101001101001010000010000010111101 1011011001000100010100010000010011001001000110111100100110001111111100010111110001010001101111111100100000111101011010100001111010001111011000111011010000010100001111101111010000011010001100101011000000001101101111010011001001111011111110011111001010100110000011010011101100010100000001101100101011001001101001100011001101100111100000100100000110001110000100101111000001001000101010101011011011000100 0000010001100110100001011110110100101011111110011101100111111001110110011001010101110011011110100000111001000001101000000010101000010101000011111110111100001110101000111100101110111110101101011001101000011000100111000001100000110000000100011101010010001010011110101011110110010010101111100110100100101101101111100111101101111111110001011000011100101110101101000111001101000110010011011011110011111000 1010100100110101111101101000011110100111100100011101110110101100010100000010011001000000101101101100101110010011000101111100100001101101001100010011001000000011010001001101110001010100001101100010100100001111011011001110110101011110010111001001111000010110011011101100001110010100111101110010101001100101000000100110010100001110010000111101111111101010100110011110011001110101001101111001010000010010 0011000010011100101111011010101110111010010001101111001000010111111000000110111011010101101011101001010000111110000001000101001110101110111110110110111111111010100001001010010101000100100010111000101010001000001000010001110000010001110101101111001100100001111011001111100100111110011011100100101110001101010110101111010111010110001100111100110101001100110111111011101001000111001010001000010101000001 0111010000100101110001110000000101010010000101110101101000000110111111101111110101010100110100101010011010100111001111111010101010000101111011100000100110011100111010110111100111101001111100000010001110010101011011001100010100011010110111101011011001010010100110101001010000101110001000011101100010000111010010010100100111111010000011110011101011111111110100000010001100011110101100001001000111111000 0100110011001101011010010111010001100100011001001110101101001001111110100001010101001001011110011101100001101010001101111001000110111000101111110110111100001001011000100101000101001111100101011100100101011001010011011111110001011111000011010111000110011011001011111111111010111100011100110110001101011111100101000011000100100101010111010111111111101101000001100001101101100111000111101001101000111111 0100101101001100101011100000110000100110111111111000010111001000110100110100110101101100001101100001001100000110101101011110010110001111100000101011110011010101111001100000010011010011101101001000101011100101110110011010101110100100100011000110001000100010111001001101101001110100001010101100110000101010101011001011110100000100110000011111001100101010000001110101110011100101010010111010101011100111 0100000111111011111110111000010001001100001010000000101110000110000000001000010011110110111100101101100111010000100010101000000101011101101010100101001010111100101010011100111001101100000111000110101000000101011100111000100100000111111110100010100001011001110001010001101001101001011010011101000000000110111000111010101000000011110001100001110000101100001101110100110010101100111101010111111111110110 0011011111001110111100000100000001010000000110111111011000100001010111000111001001110000000101111001010110100101010111100010001001111010110000101010011000001111000011001010101101110010001111110111110000101111000110100100100001011100110111010000111011111100001101011011011110110101011000011011011001100010101110010000111111111001110010000111010100111101011100001011001010100110010000010010101010011001 0111001001111000000111001101001101101000010110110111011001110110101001011110010001111101000000001100111011111010101011110011000111001010100010000001110011101101101110011100110011000010000000111100000000000010001010100111000111100111101111100101001101101101111001001111001101000001010110010101010010110100010100010000101010000100001011001011111110110000110100100010100111011010111000001010001110001111 1110000100100101001111110110110101011100110011000100111001000101001011010010100101100101110011011100000010101100110010111010100111000011110111110011111001001111111010000000111101110100011111010100010001110110011110111111111101001010000111111101100101001010110111000011111011011011110010010011111001011000100000100110110110101011110101000011011000100101111100101110001101001110110101000000110100101101 0101111011110111101010011001101110010110100010010111101100011100101110110010110011111111100001001111001101010110101000110001100001101111011010010110011010101111110101100100101001101101000110100101101011011000101010110010000111001000010110101111110110000101101110111010110000011101000010011010011010101011100001101011100101111000101011100110011011101100101101010000101010111111101011100001101101000111 1101010101011111100000101011011110111010111101101001000010110010000110100001011101001111001100001110110001111100110100101111100100101101000000110000100000101100011011011100100010001101110100101111011110000101000110100011010010110101011110010000000110110001010111010001100101011000101101011110100110010010100110100010010100011011011000011000100100101111110010000011111100110010000111001000110010111111 1110011100000001110000011000101101101101010110101001100101110000101111000100011011010010001111010110001010000011011000110000101001000110000000111111101110010101111100100110001101111000110101100110011101100101011111101011011011000111010111000101100101101010100111100100001101100111000100101011011111010101110100010010010111101101011100110111001000101110001010110101010010110110100010011111100010111100 1110001001001010101001000011100010001001110110010111110111001111110110110011111110101001001011111111100110110001010000011010100110101111101011101000001100101111011000111001000101101000110000100000000011101011011111001001001001111111111100111110011111110111010100011110010110100011100100100100111010110111010110001001111011110101101111101000000100111010110011010000110000010011101010000100010100110100 0111110111111111011110110101011000010010111000100010011010001110000100000111000110000100110100011101101101100001000010111101100001100001011100000111001111010111100011001010011001110101101100001101000010000010110011000111101110011000110110000001000110000011011000000000011101101000110110000110010000010000100010101001001001111111000001001011110100001111001000001111010001010011100100110111100101110110 0101101011110001100100110001001110001111000000110110111101011000100101001111100000100001111000000010100010100111001110010110000001001000101010110111010100000000111001010111110000100011111001000111101001011000001010110000110000110010000111011011100011001011101101010011010110010111011001110101110001110111010111011101001010001100000110101000011001100010111101100110111111111111110101000100011001010011 0001000110101001111011110000000010111000011101000110100101000001000010010011001001000010000000110010010110011110001011101110001001101010010100101101010101110001011001010100011010010100111111111000101010100010101011110011000010000000001000010011001100101111011101010001001110100011000111011111010111111001100011011100011101011010001101100000011001010101000011011010111010110001001111100001101100100001 1110011111001001100101001001101010010111000011110100110111100100111010010011000001011101011100001001011111000011011000111000100111100111001101100110111010110111100110010011111100000100000001011111001001110010110100001101100111000110010010101000110000110010001011011011010000110100001010010110000000101010001110000000101110111010100001010101110001010111110011000101011011010101011101000000001011000101 0100001100110100011001001100110010100011111100000100000000001011110011101001101000001101111111101000100110000011100010001100010011000101100011000110011010110011101000011111100000000011111110100101100011101100111010100111101011111101010001011011101001011011111010000010111111011000110011111011100110101111000101101110000010000011100111111010011111110000001110000000110010001100011111100000110101001101 0111100110111100001001000101011000100101010010100100101010010001111100111111011001001000101110110000100011100101011100010010110100001101100110011010000111010110110010110110101100001100101011010010111001001100001000001101101011010010010111011100100000110100100110110101101011100111110011011111100110101111010001111000100000111110010000010100011110100001100010011100111000100000110101010110001000100100
cTrader Algo

KeyDownイベント【cAlgoAPI】

3/3/2021 3/4/2021

4年以上前の記事です。内容が古くなっている可能性があります。

特定のキー押下で処理をする

cTrader4.0でやっとできるようになりました。キーボードイベントの処理。これにより、自作インジケーターやcBot内でキーボードからいろんな処理を行わせることができます。

 

使い方

他のイベントと同様です。Chartオブジェクトが持つKeyDownイベントに処理を登録してあげてください。

どのキーを押されたかは引数となるChartKeyboardEventArgsオブジェクトを利用して判定します。

なお、単純にホットキーを作りたいだけであれば、後述のChart.AddHotKeyメソッドの方が使い勝手がいいです。

 

サンプルコード

イベントの使い方さえ知ってれば難しいことはないと思います。

protected override void Initialize() {
    Chart.KeyDown += Chart_KeyDown;
}
private void Chart_KeyDown(ChartKeyboardEventArgs args) {
    switch (args.Key) {
        case Key.P:
            // --- P押されたときの処理
            break;
        case Key.Q:
            // --- Q押されたときの処理
            break;
        case Key.R:
            // --- R押されたときの処理
            if (args.ShiftKey) {
                // --- Shift+R押されたときの処理
            }
            break;
        default:
            break;
    }
}

ちなみにこのコードだとShift+PでもCtrl+PでもAlt+Pでも”P押されたときの処理”が走りますのであまり現実的ではないです。

 

cTrader本体のホットキーとかぶらないように注意

cTraderに最初から登録されてるホットキーについてはcTrader本体にとられてしまい機能しません。cBot、Indicatorには流してくれないようです。

cTraderのホットキーはユーザーが独自設定している可能性があるため、配布、販売するプログラムでは気を付ける必要がありそうです。

 

ChartKeyboardEventArgsクラス

押されたキーの情報を保持するクラスです。

public class ChartKeyboardEventArgs : Object

 

プロパティ
(Chart) Chart

イベントが発生したチャートを取得します。

(Key) Key

押されたキーを取得します。

(ModifierKeys) Modifiers

同時に押された修飾キー(Ctrl,Alt,Shift)を取得します。

(bool) AltKey

Altキーが同時に押されたかどうかを取得します。

(bool) CtrlKey

Ctrlキーが同時に押されたかどうかを取得します。

(bool) ShiftKey

Shiftキーが同時に押されたかどうかを取得します。

 

 

メソッドで新しいホットキーを登録する

ChartのメソッドにAddHotKey()メソッドが追加されました。単純に「このキー押されたらこの処理走らす」みたいな使い方をするのであればこっちを使った方がいいです。

また、このメソッドでホットキーを登録しようとするとcTrader本体のホットキーと被るとこんな感じにログに出力してはじいてくれます

Failed to add hotkey “Control+W”.

ホットキー登録するだけなら、KeyDownイベントではなくてできるだけAddHotKeyメソッドを使った方がいいでしょう。

(2021/3/4 返り値が誤っていたため修正)

 

(bool) AddHotkey(Action action, Key key, [ModifierKeys modifiers])

第一引数は引数なしのActionか上記ChartKeyBoardEventArgs型の引数をとるActionを指定します。簡単な処理ならラムダ式で書いてもいいですが、メソッド用意しておいて、それを渡してあげるのがわかりやすいかもしれませんね。

第二引数はKey列挙型を渡してあげます。Key.Pとかそのまんまです。

第三引数は省略可能。修飾キーをModifiedKey型で指定します。Alt押しながら、とかのときに指定します。Key単体でホットキーとして使うなら省略していいです。

返り値はboolで成功したかどうかを返します。すでにcTraderのホットキーとして設定されていると失敗し、falseを返します。

 

(bool) AddHotkey(Action action, string key)

第二引数が文字列になったバージョン。”P”とかそのまんまの文字列を渡します。

修飾キーを指定する場合は“Control+P”みたいに+でつなぎます。Alt,Shiftはそのまま、ControlはCtrlでも大丈夫です。すべて小文字でも構いません。

Key型とModifierKey型で指定したほうが間違いが少なそうですが、文字列にしておくと一目でわかりやすいというメリットはあるかもしれません。

 

サンプルコード

protected override void Initialize() {
    // --- 第一引数Action型のラムダ式、修飾キーなし
    Chart.AddHotkey(() => Print("P-KeyDown"), Key.P);
    // --- 第一引数Action<ChartKeyboardEventArgs>型のメソッド、修飾キーあり
    Chart.AddHotkey(PrintOpenTime, Key.P, ModifierKeys.Control);
    // --- 第二引数を文字列で指定
    Chart.AddHotkey(PrintOpenTime, "Alt+P");
}
private void PrintOpenTime(ChartKeyboardEventArgs args) {
    Print(args.Chart.Bars.LastBar.OpenTime);
}

 

これでPだけ押したときには”P-KeyDown”がログに表示されます。Ctrl+PかAlt+Pを押すと、最後のローソク足のOpenTimeが表示されます。

サンプルコード書いてて思ったのですが、AddHotKeyのActionでEventArgs引数が必要な機会ってほとんどない気がします。外部のメソッド登録して、Chartを渡してあげたいときくらい?

 

 

関連する列挙型

Key列挙型

各キーを表す列挙型です。マルチメディアキーとかもそろってますので、だいたいどのキーでも使えると思っていいでしょう。

個人的に使いそう、かつ、わかりにくそうなとこだけ表にしておきます。

NumPad1~9 テンキーの0~9
Multiply, Divide Add, Subtract テンキーの* / + – (Add,Subtractはデフォルトだと拾えない)
D0~9 数字キー0~9
Up,Down,Left,Right 矢印キー(Left,Rightはデフォルトだと拾えない)

全部確認してませんが、たぶん.NetのKeys列挙型とだいたい同じです。(どうでもいいけど、こっちはなんでKeysじゃなくてKey列挙型なんですかね?修飾キーはModifierKeysなのに。)

「このキーはどんな名前で登録されてるんだろう?」と思ったら、下記コードをcBotのOnStart()内に書いて試してみてください。

Chart.KeyDown += args => Print(args.Key);

このcBotを実行してる状態で何かキーを押せば、キーの名前がログに表示されます。

 

 

ModifierKeys列挙型

修飾キーを表します。

None 修飾キーなし
Alt Altキー
Control Ctrlキー
Shift Shiftキー

なお、Flags属性を持つため、ビット演算子を使った指定が可能です。

Chart.AddHotkey(() => Print("P-KeyDown"), Key.P, ModifierKeys.Control | ModifierKeys.Alt);

これでCtrlとAltを押しながらPを押したときにログにP-KeyDownと表示されるようになります。

この指定方法、馴染みがないと間違いやすいのですが、&じゃなくて|ですのでご注意ください。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2025 ajinori