0111000100100000010100110110010100101111100111001001010010011101010000110111011001011110110001100010100101100011000000100001101111101100010010110101001001001010000001110000101000100010101010110100001000101111111110101001110000001010011011111011101010011000111111011110010101001000101011100010000101110001100000110001011110100001111010011010100100000011101111000110100100011110000011101101101110001110 1011110110011010110001100101101010110101111000100100101101101110111001111100101010110101010110001101000100010110010100101100111011010111110001101000001101111011000110101111000010000011001010111001111001100110101100110000011001111110011111011101110000001101110111100111000010100010011010100001100010100100011011000100001101110100010010000101101011010001001000000110011010011000001110000111011100111110 1111110011101111111011101010010001011011110001110001110011101111111111110101101110110010010100100111101110101110101100111010010000101010010011010111110100101100000111010101011111011010110101100010011001011010100100101111010101000011001000100001101000001011011101101000111110111001111011010011000001001000101000111010100101100010110001000100111011001011101111011100000010110110011101101101011110001001 1110101010000100011100000000010110011000110010000111110000110101101101000100110110101111100000110011010110100000111100010001010001011001000101001101100001011100010101101000101111011000010111011100100000110111010010111111000000101011100001010111011110110010010110010100000110101001010000001101011011110111001001100001000100111000100110011001100011011000100101001100001100100001011000111010101101000011 0100011100000100010000011011111010100010010100010011100011010111110000010101010011000011110110010000010011101111100110100000111100001000011111010110111100011101010000000111110111011101000111100101000000001010100100101011010110110000000010011000100001110110111000111111001011010010000111001101110000110011100100010110001010100000011000010000010101100110100101110001101111100000111010101101100111111011 1010001111101000000000101000010110010110111110011001110100001100000010111100001010001101000010000101101001000100111011011111101111101100110001111010010101111011011000111010110000101100100011101000110101100011110011111101111000101011111111111010011001101000101100010101111100000101001111110011100111000001000111111101010101101110010001011000110100000011010100110101001001111010000100000001111100101100 1011111110110010110110010100111011101110110000111111011000101000101001101010011110011101010100110111000011101110110111011100010100000111111111011110111011100001101001111000111101110100110100000101110000101100001100111001101000100110100110010110110000100100001101010110001111000000000000011101001010110101011011011110000010110010110010001100000000011001000101111011011100000111111101100111011001100101 1111110000001011111001100110011101101101101000011100111000000010111100001100111000110000111001101011000111100110001010010010101110110001100011100000011000001111100001010100011100111000001010100110011000111101101011010100100011010001111110101000001000011000100111011001110000000110010110000000001111011111101001110100000011001101000011110010010010111101111100100100000000011110101000000011101101110010 1110001000111111010111100100011001110111100010000001101010011000001101010101110001010110001100111100011110110011100111000001111111011111100010010110110010110011110101000100011001101111110100010110101111110001011000000011010001010100101010011000001001000001110100101010100100001000111001111111010001010110011010001001100100110000001101001100010110111100011001111000110100101101100000000100010110011111 1011010100010111111110110110000000111000010100000011010000101001111001111011011100010100000000110000100010011000010101101101101001111110100110001101100011110110000101000111101110110010111011111001111110010101101111110010111000000101101000101000010101111110000110011001011011110001111000100011001011010011101011101011100010110000011111000011110010010000111110010001000101001100011100111100111101111000 1100000010110010110111100110010100101100100000000110000011000111111001010101100001001110000101100110101110111101000100111101100110001001001001101100111100110011000001110100101001000110110001100101100001100000000010111011010101001111000000001011010101001110010010101011001000011000001100001111110111011000010100110101000011000001100101000111111110000110101001010000110110001101011110111001111001010101 0101000000011101110110110010001100011111110110101001011100111110001111100111111001101001101100010110001011101011011100100110010110100111011011101110110011111010110101011110011111111110011100101110011010001000101000111110101010100001100011001000111101111010111011010011001101100111111101000111111001101100000110001100111011110011110001111100101111110100011000101001010010111011001101111110110011110100 1100111010011010010110010100011010100011110011110110010011111011000010001011000111001110101111111110111000100101101000001010000101010001001101000010011010001011111010100010111101000101001001110011110001100110011000101001110111100111111100000011100000001000110100101101101010101100100010111000010101011010100010100011011010101100111101000011110110001010011111001100100000010000011100101110100100110011 0110010001000110100000110111010001100011111010100000001111011110001110110000101111000001111100110100100011011000100010000100100010011000101110001011001100010111100111011000010111000011110011011100111011011110011011001001010001001110100111101111010111101111000001000100010010000111001000110000111111101100101110000011101011111011111001110000110100000000101110000101000101111000101111010110101110000001 0000111110000001000101101010111111000011000110111011111010110100100110010011000100110111110111100010010110000101001110011111000101000100110111011101101010101000111110010010111000001101001000110111101100110001101110000000001011001111010101111100111011000010010100001010010000000000101010111010110100011000001001110001010000010111001001101100011011111101100001101010010001101001010110101010101010011111 1110111000001100011110010101111110110100101110000000110110100010000101101011100110000010110001111010100000000100001011111101110011000010100110001110000100001001101001011101011110011010111101100111010010001010101101000101010100110111011110110010010110000001001000101100110110001001111010100001011100001100110000011000110111000100111100000000110000010100011110110000100010111000101100011011001011100101 0111001001001100111110111110111111110101000101101000110100100101110110110110111111010100111111100111110101110100001101111101000011010111011111110101001100100100100001000101011101100001000111101110011100010101110111000100110001011011101101010000110100010110011010011110000101110001100101111011100010101001100100100001011111000110100000000011011001100111000110010100100101110111001010011010100111110011 1110010011111110010000001111000011101100111001111010011011010000000010100010010000100001101100001000100110010111100011111000001001100101000100101000001111001010000100001011001101100100011010010011111101001111001000000010110101100011010011111000011010101000100010111010101110101010100101001100011100111010110010001001110000001101111001100001101100000110101111111011111001100110110011111101001000010010 1011100010000100111100101001111111011011100101111010110101111111000110111000000011001111010110110010111111000110100111100100100001111000111100001001100111111110110111010001100101000011100100110011011101011101101001000011010001111100000111101110101000001010100010011001110100000011011010100001111101000100111011011101000011101110000000100101100110001000001000000000111100100010111010000011000101000110 1000011010001100001110011111010000110001101101101100000110111011100011100000101001011001011101101011100000010010001101001011100001000111010001010000000001100001010000110000010000101101001100100100000010000010101001100000001001000001010110100111010110111110000001111111000011001110111101010000101000101111110110010000111111000011001001111101101011001100010001110110111000000110011000101101001001100001 1101110100000111011011101111001001111011010101100100011000101001110000101101111110111111111010110100011010000011001000000101110000010100000100101001001111010111001101111101010110101100111010001001011111010000000110100011000101111110000101100111001001101001100001110110001101110011101100110110000011001011100110001100100000011001101001101001001110100111011010010111110000000011100100100111010011110000 0110100101001001101100111111001101100001110000101000011011100000011101110110110001101010110000110110001010001000100010111100111010000111011111000010110110100010011101011010011000001001100000111011000000010001001110000101011000010100001100011100110011010111111001001110111100001111000111100001100010001101000111100110111100010111111000010011111101010001010101111110110001110011100110101001010110110010 1010001011011011101000101000100001010110101100010101010110100111101011000011100001000000010000111001010010011100100101010111001111111101001101001110010110100011110101000100001110000010011111111110101001111101110011110011011101001011100100001010010110100011111000111011101011110101100011000011110010011010010100000011101110111010000101001100011100001111011100011101100000110011001111100000101010101110 1100110010010111011110111100001111101101000011010001011110011011111001011100010010010101010110110100000110111100010111011010001000011100110010001011101100001001111111010101010101101000011000011100011011100110000101011001011011110100111010101101100101101000000011000000110011110011010000111110000101111100100011110101000010000000001010111010010110001101100010001101011011100010101010010000011100010011 0110000010001100011110111001110011101001001001110111111010101100100111010100000101101011000101110011110010110000101001101110110111011010001100100101000001010010100001001000110110000010100110010110100000100111100110001101000001100010011111100101101100100010101001100011000101101001001101101110100011001011101111100001110111110110011000010110100111010000001100110011000010010111100101011110100110101001 0011000010101110101101110100110000100101000000010000011111000100110111000010101000011111101110100001010001010010101100100000101110011010101001011101000001111100111001111010101111001100001000111100010000100110010111011111001101010100011010111011110010101110000100011010111100111010001010101101011000100100011000001011101000110001100100111011111001110111001110111100110011000000100000100010110010010011 1011101000100100011001101100001000100011010111100111111010101100100011111110110101011011011000011000010100000011100111101101101011001000000100111010101001101001100011010110101010111101011011010111101100001001000101100101000110100000001010110011001000010101110000011010110001000101101010011101110001000000101011010011111100110111001100001011111001000110000100100110101010110111111011011101001100100101 0011011011100001100100111000011000100100110111100001000111001000110001110010000111100101011111110011010000101011111110111001110010010001010011010110011000000001000010000111011000111111001011010000011000001101101010111110010000000101000111000100100101010001001111001011010101011001101101111101101110011110011110110110001011110101100000010001100101110101011101101001111010001110010011101110000100001101 0111101011101001011011100101011110000110110101110000011100000001010001010001011001000101100101110011001000101101011010110100011101011101000100101000011011010001000111110011001000000101010111110001101011101010010011100101101010100110011001000001000111011100111001000010010011000111100101000000100111010100110000110111110011100110110101100110110000010000010100011011001110001111111011110110100110100010 1111101011011100101101100111011010100000101001010011000010010101101111001000100111000000000010100001100110100010001110110111110001010000100000100100111010101111001100110010110100010010011011101010000000111111000100000100111111111011000010000110100100011110010110110010111100001000011100110001010001111010111110000101010110110011011001011100100110000111111110010000000011101111000111110010110100011101 0011101110100011010111110100111010100110110001110000011001001010010110111010001111110111101110101111111111000110000000000010011110101011011010011000001111110011010000011000100011101010100010111100010100001111101100111010100000110001001010010111111110011100101101111010001101011000010111000111101001011110001100101010001001001110100000111111011111111100011100001100101010101100011011001100111010001000 0111100101110011000111101010111101010100000101001100101010111111101011100100010101101111111001000011011110110000001010101011100101000111001011000000000101000110100101100111001011110110110100000011000010101001101110011111101110001111000001110000100111010110001010011000011000110000101000010000010001100101100010101110000000100111001101100000110011001001110110000001000100101110111011001000101011001101 1101000110010101000101111101101111111100101101000001011110101111110100010010110001011001011011100111111100101111111101010001010100010110101111110110011011011000111101101111010011011000001110010010110010011011100101000011000011110010111111100011011000110001011010011100011001001000001111010100110011011100110110010000010100110001000000010001111011100011011011111100001111110111111001111101111110110010 1100101001011010010111010110001011101001011100000001011101001101111111101110101011111000011111101100011111001100101100001111011010001101011000111001111010110000100100001000010111000111110000110011100010101000100110000000110101111111101100100110101001111101011011110010101111101011001011110111001111001000001001000101100000000110110110101000110101111000001001001010110010110100100100010101001101111101 0100010001000011011000111110111111100110101110001101011101001000011001000110010110111010010110010111111100111000110110010000011101011111001101101111101001110001111100011101111100111011011100001111100101001110011001101011111100100010100111001101001011011001001111000000101010110010101100100111001010101101000110100100110111010011110011111000000111100000100100010000000100001010111011111000111001011101 1011010011100011000010111010101100110110000010111011011100101010100100100101100111111001110001010100101001010000111101110110000000101010010001110001010110101000000111110101011000000111100101110000010010100101011111010000010100000010010010010101000011001011110100110001010100101101110110010000111110100000000101000100000000110011101111011000110000100001011001110110001111111110000111011010111001101010 1000000010010110011011000110100110111001010100101111111101110001010011010010011001011001101110111010010101101100100110111110000100110010101100011000011011101101110101001101101001011010010001000111100101110001101001110110111111101010110000010001101101001100000111010010100001111000101011100101001110010100011011010010101110111001110111011101100110100110010001101101011010000010000100000010100110101100 1111001101011010101011100101010101001011011111100100111011110001100011011111101101110101101010110001101010101110100111010010010000100011100111011100010110011011111010010110001010110001001111011101111001111010100100000111110001100000001011011101100000000100010110100011100011010100000000001010111001110101100101100100101000010000001000110010101110011100000000001101110000010000001110110110111110000001 1100011000001000111101100011011001000101010011100111100011010000010011100101000101111111000011011110011100010111110110100110111111101100100011010100111100001001011100100010010010010001100001101110110100110001001111011000101011100010001100010010100100000000011000001110100101110011011001111010001110101010000000101010101111101011111101000000011100010110101100000000110111100100100011010100110110001001 0110100001110011000101001111101000000001011100010001001001001101101101001100111101000010100111110100101100011000001101110000011000001000100001100111111001100001011011011111001110111010100010100101000010010011111111100010101000110100010011110001111101100101100110011001100011010101110111000111011101101011100101010000001001011000101110100101111111110000010111010000100001011010000010100000000110101000 1011011001110011101010110010000100101100110111000110011000010111011000100011001001011110010100000110101010011010011011111111001010100010101110010010100111111110100111011011100001101111001110101011100100011100011100001011001111110110000110100000001101010111010000101000001001001111001011000000010100010001111101011010101100001011011101011001110000101011010010111011001100010000101011110110111010011000 0110111011001101001001101010001010011100101010000010010001001000000000111011111000111100110111100110110110100011001010101011011010010100001100100000000000111110001110101001010001111111100001010001001011111100001111011111110000010111010110101000101101110000111001010101100000011111101000010001001001100110100101101110000110010010111000110001011000000101000100000011100100011000000010110110011000010111 1100110110100111001100010010111010110011010010011110010111111111000101111110011101001100110101010000111110111111100010111010100001100110000001011011101100000110000110111100011101110011010101110001111000100110100011010011110010111110110100100111111110100000001001011111010111100000011111110110010000001010101101111111000100110101110010010010100110101100111100011110100110000010001010011000011111000011 0100101001011000101001010001011010110010101100000001010000111010011100111110011110001101010101110111111110101001111101000000100100000010000101000111010110000000001010010101000001011010001110100000110100101110110010000010000010110000110111011100000011110101101001111001100000011011100000100110101100000000111000100001101110001110110010001110010000110100011001000000110001100001010001111001100110010010 0110111111100101010101001001011110011110110000101001011001000100001000011010000000110111101110011011110001001010000100000101100111010101000011000001101011011111111010010100111110010000110100100001110100011001011101101100101001110101001100101001100110100100001101010011011001001010100110101010100011001011110001001110110100010100100110100111101000111111000010111011011000000101000101101111110101000011 0011111100111010110011110000100111110010111011111100100100011100110110000010001100011000110011001111010111101110001100001011011000101011010010110001110110011100010100111110100101000010111100101011100001000101011011000110010001100000111000011110001100000011101111001000010110000010011100010001111000111010101101011000011111001000110100000100100010100010100000110100100100111100101000000010100011000100 1111010000110101100001000100110111010001001111101011011110001010010011100000011101111100100110110010010001000011101101110111111011110010100100010001110000111110100000111110010110111101001000100110010101111000000011100011101000001011000001100100001011111001111111011001111111111011011100110110101000101101110101000010110010000101110111000001101111100100001001000011100010001000000001000001111100011010 1000011110010100111110110100010011100000100000001001111110010111110101010101000101011011110100000011110011001001101101101011000000010011011100111111010110011111000011000100000100011010100111110110110001110111001001011011010101000001110011011011111001101110011111100011101111100100010111010111111001111111100110000110100110001011001111110101111010110010110111110010000111110110100010001000101100110100 1011011010100100110110100001000011100011110110000010110000011111101111100010001011001110101111011000011101000110101101100110101001111001001000110010111010011011100100001101110111111011100110011000110101100101011100011100101010110110011100001010000111100001110010111111100001110101101001010000011000100111100001011110010100101100110110101101000110000001001110011011100000111100111011011001010101011000 0011000110101000101101110110100011101111001000000111011001010000101110001000110011111010011110000101101110111111101010110001001010011010111011011100000100111100000111110101110101011010110100000111111010010100111100100110111100110100111101100011111111110100101111010001000010000011001100001100110101010100010001110000001001010101110001101110011001110100101101011101110101001110000110110110100011001111 0110101011101001101011010111000001011000100010001110111110000011001100001000111110110000000101100100101000101111111000101111001111111101111000010011000100001010000010110011000010001011010000111100000000100000111111111000010110000101000000101101010100100100110000000000101100100101000100010011010010010011101000110110001011101000011010010110101000110001011011010111011101101011000100111001101001010110 1011101101101001010111101101110011000110010101000111011110111100000011001110011001011111111000100101000000100110011111110001111000110011100000000111001011110111111011010111111100000110001100010100101010011011000111001100000110111001110001001000111110111000110011001101110000001100110001110100110011010101000100110100100110110100011000000111111101100111010010100001010010000010011000111010110111000010 0100100110000000111111101100010100110010110110000010101111000100100101001001110111000001101000100101001011001111101110100101111111001101110000001101011100100101100010010101111011110110111000100100011100001100001100111111011100100010010100000100011011111100001100001011100011010111111010000111011000111000011101110010101100100100000111101100110010000101100101000011001001101101010100110011101101000000 0000110011001111101001100010011011101111101001111110111101100110011001010011101101111010101011011110111010001100110000100111101111000001111010111111110111010110001110010100010101011100010010100001011011111010010101110101110101000001011101100011110111110111111111111001010001010000101100000011100000101010101010000101111001100100101100000111110010001110000010101011000110100011111000110000010010111100 1110110010101101001000011011011101001111010010000101001001101011001000011100010100011110011000011110111110010110010001001111110010100100110010001010001011110010011010110111011011101101111100011111011110001000010010010001001111101000000010110110000101100111011110100001001101000111001010111100001011101100110111100001100011100001001011010100010111100000111010111010100011111001010110100110011011111011 1101110011001110100111000100100111011110011100110101010110100100110110000010101011110101010010011010000110000101101101011000110010001010001111100000101001000101100011000010011110101001101001000110101000010010000110001001010010101100011000010010100001011111000111000010001100110000001000000011111111110100101010011100010001011010000001011110000011100011111111010000101110111001100011001100010101100110 0100010101001101110110011101010010100111100110000010110110111001010010001000011000110111000010111010101111011010110001000111001001110110111011100111110001000001100001110010101010111101101101000110001011111010110000100110111011011001110111010011100010101010001010011110000000011110111101001000011100011010111000001100001011011110010001100000111111000010001110111101110000100110001010011111101110110010 0011110001001011000100101001100000010010101001110010111110100011011001110100111000011110001100001100010010101001100101100100100001101101111100001001101101000100100010101111100011110111000111100001101000101001011010001010011001100111000111110001110001111010100011100101001101000010100000110101100100000001111011111000010111111111111000001111111000010111100000100110011011000000011110101001011110101111 0011101001010001110111101001111000111111010000010110100110100011101011001000000011000001110111011100111010110110000011111001111100101110100010010100010100111101110011011011000111110010001001101101001011111001011010100000011001110101110101111101011101001111011100010100101011000010001100011110010110100010111001001010101010101101100111010001100101001100010110101100010110001100101011010100000100111110 1010111100100111101010101110010100010101001000010000000010110010010011011100010110111101101101111001101110011110101011100100010000011101101100101101111101111011101101100000111010011111011111111000110101100010110001010110000101001011111101100010100011001011011110101011001000101010000010011001101010100110101001100011101101010011011100010000111000100110101101100100111001011101001010101000011000110101 1110111000101011011011110011001000001101100111011111100000111111111101010011110000001001101101011011100011111010110111111001111101100100100110111111000100000010010110100100101110101011101010110110110010101101010010111101110010011110000101110110010000011011111100011101001110100011011000011011010001111100010010010100100001011100100011101011101010100011000111010111111011110100100010101100101011100000 0111100011100000101001000110110011101000100001100010010100010101110001010110111001101011110110110111001011001111100101101100100111111110010111011110111100100000100011000100110011010111101000011011011001011010101111001100111111011110101010011010100110100000110100110001100110000111011100110011110101100111010001010001011111101100101101001000110110110111011111101101001001010011010000001011000000000101 1100000011101001111001010011001100101001001010000011110010101100100001101101101101001111001011111001001101000010001000011100000001010000010100101001111001101001101100011101011111111111001000111011111110000101100100101101111000010001101101100110110101100101111011000000001010010110101011011100000101011110010101100110110011000110000101010011001001100101110101111101010111000001001000110011000000111100 1101110111100010100110100011000010111110001010000101011100010011111001100000010100101111100001000101011001111010111101101101110010010111000000101001101001001111011111010100010001010001111000001001001011110111110100111110110001011101010000111000000010111000101111110110110000101100011101000101000101001011111100111000100010011001011101001000001011100101000111010101001100000001010100011000100000001001 1111111111111001010000100010110101111110000111011100110100110111011111010011111010111100011101011010100010000001000110001000001000110111010011000101000110111010111111110101111010001011111000001000101100111111001101111111101011000001010000111110111000111001010011101110111010101010010110000011010011111000100100100011110110001101101011001010110101111110010100101011110100100100000111101111110001000011 0011111001101011000111100010011001100000111000100011110001100101010111111001001101111011100011111010001000000001100000000111100101010001011111001000111010110000110101111011100100110110101100010100111011010011101111100100000010010001101100010001010110010001101101011100101111110111010111000001111001101110010101101100111101010010001111010000011010010101000101110001100010111110011101101011110000110011 0011101010100110100110010001011111110111110111100111011000100011011100101010000100100110111001000111111110110111010010011011110001010100110010101000110000101001111001011001011101010111011111101110111101011000001010101100110000011100010110001110010000101000010000101010110011101000000111111111001111011011100100010100100101100100010011010000111011101100110110101100110010010110101100001101001001001110 1101010011001001100010110100101100110111000101011001101100001111000101001000111110001110011001111110000100110011101111001010000100101101111100101001001010010111101000110001110000001010101000101111110110101010010001111011011001011010000011001111011011011000101010011011111101010111110101010101010011011010100111010101100011000010101110100111000101001101010011110111101011000100000101010000010011111010 0001100111111011001111111100100101000101100010101001100110010001110010101101110100111011000111110101101111110000101101101001110101011010000000000111010010101110101110100111100111111000010011111100010101000010111111101100010101111110000100100101111111011001000001111000000010010001111111100011100011111110000011010100110100100010011110101010110001111111001100110011110011010000000101101011000001110100 1101000101010101110011111010110010110001110100100111110001101100100111001010100111010000011010010011000000001010000111011001101011101010100100100010000111010001010110100101101100010111000100101001110011011100110111110100111110001000010101110011101010101001111100100101011101110100001101000101000100010001001101011101110011111010111011000111001110100111010110010100001000011111001000010100011000111110 0100111001110100111111010101101110010011011101000110001110101010010111110010110001010001111111001010000000001101000110101000000000010000000001010110110101010000001011110100110000111010111000011101000100011011011101100101001100010101111100101101101001101110010010101001011011011101110111011001000100010101101001110101010011101010110111111101011111011001110110000000110010110001011011001101101111110010 1101001010010011110001101010111010011111111111101011101111100010011111110111100010000111000011101100011010010001010010100011010010101000011110011000101001010010011001110010100010000011001111000100001100010011111011000011100110111000011110011101100010101110000101101111111010100100011110000011110100000100110000111101101111111111011010101101111000011100101110011011111111111000100101100110110010100001 1111111100100001110000101101001001010001100000000101111110100001100010010011011101001001001110001010110010001101001011101111000001101100001100011110000000110111001101110000001011100000000111000100000000000011101001110101100011011100101110010100110001000001100011000100001110111111010011100010100011001100111100101100110101001011001100111101111000001001000010110000000011110010100111100101000001010100 1001111000010110110001010011010011110010101101011011100100111000101111010110111011000100000110010110000001111111100100001011110100101011111000001001111011010011100110110001010010110100100100110001001111101101111001001111011011100010101010110100001111001111010010011101000010110010101001110011110111001100001101111100110111101001101001001100010010011010111101010011000111100110001001011010110110110110 0011011100111101001011101011011011100000011011110100001000111110001000111111101010101001111101101100110000111100001111010110111100010110011111100000001101110011010100100110010100010011000011110111101010111100001100100010010000111011000001001000001001000110100101000111101011101001000000001111010110100100110100000000000011111110110001111101010000111011100010100100101110000001100000101010010011010001 1011101111101011011000100100101010010000101001000111001111000110000001100110111110001111010001001011001111100101000101001010010110110101011011001110110011101010111110011011101010000001010001001000100100111100000101010111001000011101111011000110000000110010001111011111101001011011011111111011110111011110110011011001000011110000000001010001101001100110100101010100101111101010001001011010110100100101 0000000001010111001111001001101001100110010110001101100100001100010010111101110011011000100011100110010000000110001001011011111001000111011111100110110100001101100000000111001001111100100111010110111011110001101110010001010101100001010100000111111100101100100000100100001000001001100110001101010010110011100011111010110010011111000011101100100100011100100111100001011100111011010011010111111000110001 0011111001001001111101101011110100011000010010000011011100100000011110010010100110110110100100110011001100101011111001111000111110001000101010000111010000010111001110000000000011111101001110000001101000010101110011000011101010111001000101100010101100000100111111100101001110011000101111000001100110100010100101111011011101111010010100110101101000010010111011100010101100011101000100011100011110010001 1010101000010011100011000101100010010100011100100100111100001000011100111010100001010110100001111101000011101010011100010010001110110101101100000110000110111101111111101100001000111001101110001100010100010001111110101001011000110011111111101101100101011010110011101101000011000101000000110001011111111010011100000111110110000010100110011011100000110011100000011100100011011110011010001110000000011001 0000011100011100100101111011011001000100101010011000101100101101000111110010100110000110000100011111100101110110101111000111000110100101111111001111100110111000011110111000010111111001001111111100000010010000010111101010000111111100100100111010100111111001111001101101100100110001010100111101111110100100110101100010100101111111010010011101100111001010001111001111001000111000010101011001000100010101 1110111011001010111000101001011000110010011111111011111111101001011100010100011001111010110011011001011010101011010110101010111011000110111001010011010111111100101101110101110111110010111010111001001011100000011001100000011111100111110100111010000011010101111011011011101110101011101010000001011000110010011110110111110001001101100100011110111110110001100010100010011111100110010011100100011010000111 0010101100010110001111010000110101111101001111100111100001101100011001101011110011100011101011100111001010000010101111000011011001110101010011101101010000101001101111110111001001110111001000100111001011100100001010001001000010011100000001101001101010010101110000110011011011000001010111100111001000011001010101100111110001111110010100010000011111011111101000001001001101101010010010001111101100011100 1001001101011010110010110010111010111011110001100001000000001101100110001101101100000111100011000011100011100101100011110000011000010001001101110111010010100100111110011100110011010011011011110101001001101100110100101001001100100001011000110110111000100000101011010001100011001111110110010010110101001100010001011111010001000111000001111110101010110110000011001110101110001110110100101110110100110101 0000010010011010111100011111001101111101110111010101011001011110010000011111110011100000010001011000010111000011010100000010011111111110110010000111101001001110010110101101010011000000101011100000101100010100110110001001111110000111110010100000111101000010010001001010000010010011001100111001011110000110110001101010100011101110101000000001001101101010011100010111110010000010010110001111100110001011 1111100101110100011000110111010010011000000111010010000110100001011110000111011100101111000010010100110100101111111110111011111100101110010000001101011101111111111010110100110101010011100110011001101000100010100111010110101010010010001111000000000101000111010100010100011000110000100111011001110110011100100111100111001010000110010010011011010000110001001011101100110111111001110001001010101010010110 1100011101110101110010010001111100000010011111100111000110111001011101101010001010011000010010111011101011010000001110101100101100101100101111111111101110111000011010111011110001110111010011110001001101010010000111011110001100011100000010010011101100111000011101101001000010111011010111010001111101000101101111011011010111101100101111000000110100010001100001111011001001001000101101001100110110001110 1011010010111010111001111000101001000010011110100001011001011011110110101110101101101101110000111001011011100101100010001101101011100011100101110110110000111101000111001010111010000100000100011000111110100110001011010000010100100011010001001110000110101100011001001111011110110010000100011010000110111010001110000110110000000001000101010100000100001011101100101000000100010010101111101001011111111000 0011100010111111010100001111000100111010101000111101101011110010101111001110101100000100111100110110110100111111100100011110111011111001101011010100110101110011011110010011100010000010011010110010101110001000111101010100010110100000000101101000101000000100010001001110000011000100010010011101001010001001111101000101101000000001110111001000111100011100111011100110000001001000110110101010100001110000 0100100111111001010010000011001110100000010100110101000010101001001110111000100111110000001100101011111000010110000101100111101010010111101001111001101001001010101100011001111100000111010010011101001111110000101100111010101111011001111111011101010111111101000010100000101101001101101100010110100001000110101101010110111100101011011001011110001101010011011110011000000001110100010110000110111000001000 0000001100010010111110010110001111000101001000100000100001001110001010011100001001010011100000111001100001110100000010111101100000001111100010100101000010100001001010110001101101011100010000011111100100011110000000011111011011000000001110110100011000100111011111111111100110101001010101001110010100000011011111111011001101110110100111111010011001010110111011100111000000111001111100101000100110100110 0010110101111101010011000000011001011101000001100001111101111000011011010011000101101011011110101010101110110001001110000110000000011000100011010011100010010110110000011100111001100110000101100111011011101000111000101100011011011011101100101100010100111110000011010100110100010110111101001000011011010001001001100111101001011001101111111011100100001110000111110011110001011100011111101001100000101011 0101011010110110110101011010000001001010010000000000101110010101111001100010101110110001011111100011100000101010100110101010110100101110101001100110111010111111100001101110011010010101010000111111110010100101101011101100111101110001010110001011101110101010101011110100111000011001010011111100001000101001100000000111001100110101010011111111100110010010010001010001001100010111011111110111001001101010 0101100010101010111011110111101011111111001110001100011110000101001110100011000011000000111110101000011011100110101000100000001010000011000001111101111000011000110011111111111100101001000000000000110000100110001000010110101101000011010011101111010100011001100011011010110101111000000000000101001111101101100111010000110011101101100111011110000000010110110010000001011101110100000010110001001011000000 0110000100100110010100110011101001010011011001110110000010001111000000001010011101110010110000000010100101001101111101110011100011010110001101111111000000001111100110000101111011111011001001001010110101000011101111111001101000110010001110111101101011100101101110000110010000010100101101101100101111000101111001001100001100001000001010100110001111111100010011010101111110100000001011111110010001000011 0010110010111011111101111000010110010011011001101010100010011000110000011100101011101101100001010000110110000001100010010100011001111110100001101010001110011000100110011001111100100100001110100101011010110010010111010100100110100010000010001010000101001111100010001110111010011000011001011111000110110101100000000011001000100100011011100001010101100001011100111111011011100111111000010010110011001111 1100111100100100101000101111101111101111011000001110011000011010010010101001100110011111011111100001110100110101100000101101000110110001100111011011011010011011100111000000001001111011101101100110101111101100100100111111011011001011101000011111101110011001010101100100011010001011100000000110011010101110111110000101110000001010100000111010000110010110011111101010010110110000100100111111010011001111 1100001010100101110001111010001110010111101001100101101111000110001111000011100111000010101100000100011100000111101010000110001010010101001101001000111011000110011011101101010010010011100010001011010101000000111101111101111000010001110100111001001001111101011101110010110110101110101011011100010111001110000101001000111100011110110011010011011100010111011001010101101001001111111110110100110111111110 1111001001100100101011010011111100001111010110010111000010000010011111101011101010111110100010001100010111010010000101010010000001011001010001101011001110001001101101111101010000001010110000110100001111100010110011111010000000101101111000001000001011001100111010101011001111010101000011111100101001010101011100111101010000010111000111000100100100101010011011100011101010001010000100100011110111111111 1100001100110101011101011010111000000000101100011010110001110101010001010010011011000110001111111110111111111110100100101010000011110111000011010111000010101011010101111101001011000001011010001010111101110001000101110111110011101011001000010111011001000000111010001000000111011100001110010011000100100100111100100011011100011011111110111010110111000111000010010101100101100100111111111111001001110001 1010110100001001110101010001010011101100110110100111101101011010111110110110101000001001011011100001100000010101101100101000101010111010011110100101011011010000100111000001001101101100111101110110101110110110001101101011000010000010110100010100001110010001111101110000001001000000111110001010010011111001000100010001001110011100110000100101000111110110000011010100010111001111111100001000111110100010
cTrader Algo

【cTrader】水平線で音鳴らす【SampleIndicator】

6/6/2022 8/18/2023

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

水平線到達で音を鳴らすだけのインジケーター

久しぶりにcTraderプログラムのサンプルコード代わりの単純インジケーターを公開してみます。

コメント欄から「水平線で音鳴らすcBotできませんか?」という感じのコメントをいただいたため作ってみました。(コメントありがとうございます!)

機能としては「チャート上の水平線に価格が到達したら設定したサウンドファイルを再生する」というだけのものです。

cBotではなくIndicatorとして作ってあります。

単純ですが人によっては有用に使えるのではないでしょうか。

 

ソースコード解説

全ソースコード

using System.Linq;
using cAlgo.API;

namespace cAlgo {
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class HorizontalLineChaim : Indicator {
        [Parameter(DefaultValue = "Alarm01.wav")]
        public string SoundFile1 { get; set; }
        [Parameter(DefaultValue = "Alarm02.wav")]
        public string SoundFile2 { get; set; }

        private double _exBid;
        protected override void Initialize() {
            _exBid = Bid;
        }

        public override void Calculate(int index) {
            if (!IsLastBar) return;
            var lines = Chart.FindAllObjects < ChartHorizontalLine >();
            if (lines.Select(l => l.Y).Any(price => price < _exBid && price >= Bid)) {
                Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile1);
            } else if (lines.Select(l => l.Y).Any(price => price > _exBid && price <= Bid)) {
                Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile2);
            }

            _exBid = Bid;
        }
    }
}

はい、これだけです。短いですよね。自動生成されたテンプレートに数行追加しただけです。

インジケーター始めてで自動生成コードの意味がさっぱりわからんという方は先にこちらをどうぞ。

今回は表示させるものがないので5行目のIsOverlayはfalseからtrueに変更しておいてください。falseだと空っぽの別窓が出てきてしまいます。

7~10行目はインジケーターのパラメータとして音声ファイル名を指定するようにしました。

“C:\Windows\Mediaフォルダ内ファイルで指定する形にしてありますが、自分で使うために改変するならパラメータ自体なくしてしまって21,23行目の命令文に直接ファイル名指定してやっても構いません。

 

「到達したら音を鳴らす」やり方

「到達したら音を鳴らす」をプログラムで表現するにはどうしたらいいでしょう。

単純に値動きがあるたびに「その値動きにより水平線をまたいだ(もしくは重なった)か」を確認して、音を鳴らせばいいですよね。

式で表すなら上抜けなら「1Tick前の価格」<「水平線の価格」<=「動いた今の価格」、下抜けなら「1Tick前の価格」>「水平線の価格」>=「動いた今の価格」ということです。

インジケーターにはCalculateという毎Tick実行される関数がありますので、そこで上記の判定をして音鳴らす処理を入れてあげるだけの話です。

・・・と、その前に「今の価格」はBidという変数が用意されてるのですが、「1Tick前の価格」というのはIndicator側で用意してくれていないため、自分で用意する必要があります。

12行目で定義してる_exBidがそれです。毎Tick更新する必要があるためCalculateの最後(26行目)で_exBid=Bidというように更新しています。

 

Calculateのコード

if (!IsLastBar) return;

18行目のこれは今計算してるのが最後の(=今現在の)ローソク足分じゃなかったらなにもしないようにするためのおまじないです。

インジケーターは初期化後ローソク足の本数分だけCalculate()を実行します。このインジについては過去ローク足分の計算は不要なのでこうしてます。

var lines = Chart.FindAllObjects();

19行目のここでChartのFindAllObjectsメソッドを使ってチャート上の水平線を全部集めてます。

毎Tickこの処理をするのに抵抗があれば、初期化時に集めてフィールド(メンバ変数)に持たせておいても構いません。ただし、その場合は水平線の追加削除時にフィールドの値も変更する必要がありますので注意してください。

次の20~24行目部分が本インジケーターのメイン機能部分ですね。処理としてはこうしてます。

if(価格が水平線のどれかを上に抜けてたら){
    File1の音を鳴らす
}else if(価格が水平線のどれかを下に抜けてたら){
    File2の音を鳴らす
}

ifの中はC#のLinqという機能を使ってるため、知らない方にはわかりにくいかもしれませんが、下記と全く同じことをしています。

foreach(var line in lines){
    var price = line.Y;
    if(price < _exBid && price >= Bid){
        Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile1);
    }
    break;
}

(「価格が水平線のどれかを上に抜けてたらFile1の音を鳴らす」部分のみ)

Notirications.PlaySoundはcAlgoの機能で指定した音声ファイルを再生してくれます。

注意点としてはフルファイルパスを指定すること、文字列内のパス区切りは\\で表現すること、ぐらいでしょうか。

 

これで完成です。

これだけじゃさすがに機能少なすぎるかもしれませんが、自分で作るならここから好きに編集していくことができます。

ぜひ理想のインジケーターを作ってみてください。

 

(2022/8/12 追記)

現時点ではcTrader4.2で機能しません(泣)

先日アップデートされたcTrader4.2ではFindAllObjectsが効かず機能しないようです。明らかにcTrader(Automate)側のバグですね。

cTrader4.2で機能させるためには18行目あたりに以下の1行を追加してください。

Chart.Objects.Count();

コード自体に意味は無いです。意味は無いですがこれで機能するようになります。

FindAllObjectsが普通に使えないというのは結構致命的なので早く修正してほしいです・・・

 

(2023/8/18 追記)

上記気づいたら直ってるようです。cTrader4.8で追記なしでこのまま動くこと確認済み。

 


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

新しいコメント

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

cTrader's Life

© 2026 ajinori