1100000100011011101010011001111011010111011110110100110001100011010101111000101110010000101010000101100011000011100100111101101100110111110100100100101110111110011000011110111001011011010000110001110111011011111101010000011110111011100100110000001000011111101110000001100010111000001010111000011010101100000110000100001011101111001111110000001111100100001010100101001000011001111011011101000011011001 0011010101111011101010011010100101000000001110111000111100100010111000011011111010101001100000101010010010010110010011111111110011010110011000010111010111001100001101110001101111101011111111010101111111111010111100111100111011000010001010011000010010100101101100111011101010100001101010111001111101101010100101101111100111010000100011011101101111010000001100111010111001000010001000001111010110001000 0011000001110111001001000010100010100101011010000000000011111001010101001101111100110111000110000101111000100011000001101101011011001000111001101000010110111001110110011010100001011101101101010111101000001111000001011110101001011100000100011101000010111000001101010011110100100110010100101001111100011011111010100000100101111100110111001100101001101000101001011000100000000100010011110000100011100001 1001010001111100001001101001111111111100011001011001000011010101001011010100011000010011011100011110000001100010111011100101000110110101101110101100101010110111101101111110010000101111110010010000111001000100100011001111010000100101001010011100101110110001001001100001111100111000111001011011010011011011110001110011000010001011101001100011010011100101111001101110001010111000010100000101010001011111 0101011110100010101111010111100000111000111100111101101110001000010011111010010000110101000010110110111001100101000100000000111001011100001111100101100100000010100010111011101010000011010001100111000110001001000010010000100001001110100000001001101110111101100110011000001010000011011111011000010010101110101101001101001111001011111111100110100101100100000101010110100010101110001000100000000000000010 1100100010110111010000001100110000101100001001100101100101111011111001110000110100011001110001110110100101011101000101100010101100011010100000011001101101000111001100111001101010101101101111000011111101011000001010010010111100110000011001010111100101000100110110111010110001110110001000100110011001111011101001011111010010110100001001010010000110001111011100111010100111001110111101100001001001110010 1101101011010011110000010100001111101001011011000001100100100110010011011110100111110111100100100001010001000110111110101100001011110110111001000010110111111000110111101011010110110001000111010111101101011000110001110110001010101111000010000110111110100001000111001101110100100011100100110001100100001011010011100010001000100001111011100111100011000001010101100000100101000100111111000101001110110110 0100000010011010111001100100110010101000100001000000011110010100101010110010010011001011111011110011010011010111010111001000111011110101000001110000101001110001001111001011000001111110100011100101010111101000111100001100010101100010001011100101010110001101100001100111011101000111100101111100111111101011000001010101001110001100110000111100011001001000000111101010100000001011111001111000100001111000 1100100100000001010111010111101111000000110011111110101011010111000001101011111100011101110101001101101110101110100100001110000101110101101111100001100011111101001001100010100000111000001101100101011010110000110101100110110111101101111010011010100010111011011010111000111100010100011011101011101001111011011100011101110001100101000001111100110100000100011011010101100111101100100101010111000011100100 1110000101010100101001000101101001010011001111000110000000110000001110110101010000100110010101110000011110101110111001101001101000011101010110110100001001001111000110101001000110100101100000001111111000100111100101000110100001010011110010111111111010000001000110010001101000101110010011011011001100000100100110100100101010110010001100000101001001001110110001110100100101111111010111100010111000000011 0001101100101111110111010001001000101100111000110000010001111011110110001101101110110100101111001011011100001010100101100000001101111101111010100011000101100001010110110011000100111011101001111011100110110101100100101001101100000000110111011010001010000000001011101111100010111000110010011100011101101111101101101000110101100111110110111000011010101010001011111000111111110000011010101101101111110110 0110111110110101110101000101110100001011000011111100111111111001011111001011001110010010010101010101111111000111000101111001101100111111000000001111010000100001111101001001000101001000111100100101011010101000110010110001010010011111010100101011100001100000111100001000000110100111010110000111111110101101100101101100000100011010101110101111110000001110100110001110000100100100110001100000101001010010 0100110010101101111000011011010001100110001000111100101000111001100111010011111011111110000110110111111000110001100000001101000000010101011000011100101111011111100111110001110000000110010001100010111110010110101011001111001010010001110100011111011001101100001000010111101010001000110001010110111001110001000111001110101111001110010100100001110101010000011110111100111000001011110111101001101110111100 0000101100111000010100100110101100000100100001000000000111111110101011101010011111110000010110010011110100000111111001111110101011011101000101110111001000010011001101100001001000110010110101100110010101011101011110001011011010110010101010100000101000011011000001110001000110011001111011101100100011111101010001111001110000000100011001000110000001111011010000111110111110001110101000100101010100000100 1111001110011100100010110011010101000101000111110101000111000010101000100000001001011101101111001100011001010000011001000111100110010010100111100010101000111000100100010101101011100110101001100100001001010010101100010011110110110101101110001010101000001010111010000100100111000111101101100100111110111010000010010001001110001110010111111011111111001000110000011110111110101011101011101111100000101000 0101101000000100001110010111110111010001110110010110001001110100101011110101100000110111011011101010101100010100100001001000110011011010110010100111110011001010110111111100100010000010100011110011011000011000001101101001000110111010101010110101111001101000111111110000010110011011101100110000100011111101011110001011000111010110110010100100101000100101111011101101101111010001101111100100010110110010 1011100111000101111110101110111000101100011001111010100010000100110011000000100101010011010001100101011001100010011110100111000110100000001001111100111001100100111100000111011001100011111010011110100000011011111000011111100010010111000101111011101101001101110010101100001011000001000110011101001110100011010010000001110010110100111101010100110100000110101111010111111101101000110101011001101001100101 0101011111110110000011111101100010100000001001100011000100101111111101111110111100000000011000001011010000011101010101001110001110111011010000110101010100010111110001011000111100111110100101101001101100010001110100001000011001001001100110011001001010000010101110110000000110101011000110110011101110111110110000100001011110010001111000100111011011110110011001001001011001000100111101000100100000100000 1101101001010011000100101010000111011010001011111110000100100100110100101100101101011111101100001001010011010100101110000000101100101001011110010111110111111101000101010110110000001111011011101110010000001011011011001011010000111110111011000011011111100110111101000001001011110011010101100111100110101011110000000110010110100000011000010011110111011011010100010001000010011100010101010001100000001010 1101011110001000101100100001000110100011000100110110111101101111110001000000111010011111111110000100010101000010111110100100101110101001000010101000011011000111111011100100011101110100111001100111101111101001110100000010000011101111001100010000111011111001111010011101001111010101101110110100101110100100100111111001101110011010000011000110100001001101110001101000011010010011101101010000000111111010 1111011100111000010010110110010100101000110100100110001011100001000101011000001010101001110101100000100110000000111101111010111011011001010001111110110000111000010011111100011000001000000010010110110010010111011110010110011101011100000101000010010110001101010000101010101010010010000101010101001111010001011000001111010100001010001010100000011101010111001111101011000000111011000100100011010001101000 0011010000010000101011000000111001100010111011110000111110000100110111001000010001000011001110100110000011011101000101010001101000111110110100001100000101110011110110110001001101000101010001010100011011001111110010101011010100001010110001101110011000000010001110001001011011010110111100010110110000010010000111011111110010100000100001001001011110101001110110010110001101001111010011011010111000010101 0101000111100100100111001100000010000011110000001111001011010101000010011100101001111111010111111011101011111011010110001001011000110011001001010010010100011110110010001100001010011011111101111011010101111011011101000011010011100001111110001110000111001000100011110010010010001010111111110101101001101010001110110110111111001111000000010111001001011001010011001001100110110011011100001111111111100000 0001011010000101011110101111001110000111111000101100100001001100111110010010100001110111000111000100110010100000011110100000110111001111011100000100001011011001111101011000000000010110010100110100010011100001110100110011011010110110001011010111100000111000111010011000110011001100110100010001001110100000100101011111111001001011011101100111000101010100001000101100011010000011110000000110011010001000 0111001101111010011111110001100110101100010010100101111011010111100111011010101011100010111001101101111110000000111000101010110011110000011010101100010100101011010010110001011111001110011011110001111101000100111111001110010101111110101110010110001111101010111100001110111110001011101011110000010101010110001100100111001101111011110011001001000110001010101011011000100011001101111011110110110101101000 1100001101100101111110111111101100011100110101011000101101001100110011011101100000001110110110010111000011010000010111111011001100101001001001110010011001000010110010000000011100101100101011001001001101101001101011100010111110001011100011010101000101010011100010111001111010000111000111101110101010010111010110101111001011001111111011011111110011000001110010001011001001111010011001001110001101111111 0110011111100110101000111001000010101111111000000011100111110111100000111010001110111111011000100010111100011111001100011100010111011011110101010011000000110000001110101111000111001010111011100000110011000100010100111100000001000100001010010111111101001001011100101110111110100111001010101100100000010100110100101000010010010100100000101011001110110001101111001101010111100100011011101111011110001101 1011100010110111110010111110111101101101001001000011100111011001101110001001000101001010101111110011000001110110100111100001111110010111001010011101010101010011000110100111001010110010001101000010001100110000000001101111111001101000000110101001011111010010100100111100101101110010110001001100110011110101100000000110101000001111100010111100010111110101100101111100001101111000101101000111110101011000 0001111110011110110010011101010110001101010100100010001010101101101011111010111001110101111111000101011010011000111101111110101000100110110001000101101011110001101011100011000101000011000110100010000010010011110011100100010110100100010011100011110010010110011010000101101111001010101101110101101110111000100111101011000101100110010111000100100010010010011101100111101000111010110000100000011110110111 1010110011110110001010110101100000110110110110000010101110111001100000110110111000111111110110100100110100000110000101111111001110101110000000010111100111110100011110100011010110001111101111111111101101100101101100111011110001010010101011010110011110010011011010101100111011011111010000010111010010110110001001100011000000000001000010001111110110101001011000010010101100110001101000000101001100011110 0100000001111011001110101011000111001101101101000101000100000010001000001101011001100000010111110111101101100011010110000110101010001101110101000110110110101001010011010100100011010011000101001001100111010001000111001011100011010111101100001000101110001010111000100001101010000011111101011010001100001011101100110011101111010111100011111111110100100000011101011110101100100000011101000001011011011000 1101000101100111100110010100101111100000010101000001101010111011100010000000100101100110100110110010000110100000000101110101010101010110111100011010001100001100010111110101010100011000001111101110011010110010110011010011010100011010110100110100001100011000000011111001110110001000101001001000001000101110000110111001001100001111101001110100111111010011010110101111101110111001101000011101111100010100 0011001110011111011110010110110111011010110000011001010101111001000101010011110011011010110000011110111011010000011100010110101101110001110000010010010110101011001001000010111000101000101100010011010011000111111000010001110111011001101100001100010110100011010001110110000111110010110111000010001011111101111100011001110110101010100100110011001000111001110010101011011000010110101111000111111001010111 0100010001111101010000000000111000000011000110010001010101010100001000111000011010110101101101101111011101011101011100000001011101001101010100011110110101001000010010001000010010001011110101001000010110100010111100101111001110011111110110111000001110010010011001011000011100111100011111011010111010001001100110000001101010110100100110100010101001000000010111101011111110100101010011101001100000010111 0111101110001010111000110100000100000101110111010100001110010000011010100011110100010001101001111101011000000110100101011111000110010100100011111100101001101111110100000111011011100000101010001010110111111000001001011010101001000100000111011111110111001011101001011000110000010011111110001010001011111100101110000001000100111110101011111011110010110101001011110000011111000101110111111100111001110111 0110010111101001101101000100101011010100000101100000001110011010010110011001101000000001010101111010100011001100101010110011001100010010000100011010001001010010000001000001101010011101110000111110011001000011010011011100111000111111010111001100101010111010010110011011011101110000011110111111101000000101111011111001001000001100011110001110111100100110111010101100011011010011100110001010010101100010 1010111111001001110001010000010110100100111001010010011010001111000011011011000000110001100010000111000100111110100001011001100110011110011000110000101011100011011110001010100000010000110100101101101010010011011111011010001100110111011101001101010001111010001111011010011100110001110000100110100001011100101011011110100000000101110101010111101001001010000000011000001010101110010011000011010011100101 1110101100001110100010000111111001000111111000111010100011011001100110101000010111010110111001011110111000110101100101010101101000111101101111010110110100100000000101010101111111001000000101110110011111111110011011111110001001101111101101110110101011110011100110010001010010110000111001010111100111110101001100111001011111001010000100010001111011001100101001010011110000010111000010000100011000111101 1110010001011011010011110101110111101111010110111100001001111111010110101101111101011001100101001101111111111100011111000011000010101000101100001101101111101000101010100101100000111101010000101000011000100101010011001111110011010000100001110000011100100001000111101101111000111010100000101100000000111111111111111010111111111010101111000000101000111101000011101110110100010100000100011101101000010101 1100111001010010001001100011100111101110110011101000001110110010001000011110100001111011010101001000100110111111010111110010001011111101101100100111011001111111111000001100100101010010001110011011001101111100000110101000010110110010100111100000111010011100110010110011000110000111101110111011011001101101011000000110000011001110110010100100101100110101101111111111001101100111000000010111101111101101 0100101011100101010110100100111111100010001001111101110011001111000011010001000000001111100001010000100011011111011000010100001001100010011000010010010111010011100011010111110100011101111010010000000000001000010101101011010001101001110011110111011010101100100011101010000100110100100010101101001111101101101001110110101010010100011010010100111111111100111000101000011001111010011111010110010110010001 1000110001111110011011110010101101010110111100101110010100000111101100100111011110000011100011000101000100010111000010100101000100110110101100010111110110010101000011100001011011000000100110111101000100011110010000010001000111101111010100000111011011010101110111010000110001100010101010100111001101000001011011100011100110100001111001111011111010100000001111111110010110000100110000110100110011101110 0101111001001111100100110010001011100010000101010011101010010110101000011110100101110110011011010000000001011001100101000001010000111110000010001100101111110110101110101110000011010110111000110000000111011001101111010101000011100101001111101010101001010111011010010000011101000100100000101011011011111001101010001010001000111001110011101100101101000100011110000001011001011101000010001100010101100011 1011110001010001010011110011111110000110010101000101011001011011110110101110001011111110010011001111100101110101110011010100111010010011100101000000000101000101110110001110001111111001000101110010010000000011110010110101100110011001101000010011001000001011110101101101011100001110001111101100011100110001100000100101100000110011110100111011011001110101011010000110000100110100010010111000001011000100 0111011001100010101100111101001000010110000100101011010111000001101101101101001101001011101001011011001000100011100010001111000100001100001111101101111000101000100010110011110111101011101110011000110001101110100100011111011011011100011001111000001011010001000000001001110100000101000100101101000110110000010111111101010111011110101101010000011000101100111100101101000101101001111001011001111110011011 1001011110000001111100101001101000010000100000100001000110000111010000010111111111010100100001110011100001111000011110011100100101111110000011111000011001001000101111010100000101001000100110010101110111110001101000111001011110101111100101000000101011110110010000001110000011111010100010011010000000000010010000110110011011000100010100001111011100001010010110010011101010010100001010001110111110100110 1111110010000001111110101010110100000000100001011100111101100111100100111010110110110001011101010101000011101000000011010110110000110001010000010100101110100011000000100100000000110101101010010101101000110101011000001110010010100001011100010010001101111100001110001001001011010001110010000111000110100101111010100010000110100000101100011011111001011001111100010010100111101111110000010001101000100011 0101100001111011011001010110001100001111111110011001100000110001111110011000010010000001010010110011110111100000010000110100010110010100000100111011110010111000010011001100010111001000101011001000100100000001010110010111001110010010110100011000100010111011100001111010010000000101001011101111000100100101011110010010011110010111001011101110000111111001010001100110110010100101011111000101001011000010 1010000000111001011010010100011110010111010001000001110010101001001111111101000101111001101000100100010100111000100101010110101011100110011100010000000001000010010011011011011111000001110011000100001101110111001001010110111110000111000011110011000110001011110101101011011101000101101100111101001110111110101001001101011111110001011111011000101100011111011011100111110111000001100000100101000111001000 0100111001101001101011111111000010001001111110100110001111110001000100100111001111110010100111101110110100101010101000000001111010101111000001111101001000000010001001100110000110100000010001101110011111011011100110000000101011100111011001010110000110101100101111101111111011110011100110110101110001000100010110000100001000011100110001011010011010010100000010111101110000100101110101110100000010010000 0100100110000001110100011010100110101111010001010100111001010000001101010100111011110010111110110001001101101110100110111011100111100010000001000101001111101011110100011011000111000110011111100100000001100111110000011110010110100000000010010101010101101010001111011001000011110101111100001000101100011000000100000001011100101011100000111110111010011011010011111100001101110100000101010000010000010100 1010101100001101001110010001000100010111101011010101111101101011110110110111100100100100110010111010100101011010001001101010011001010100011111110100001011100001111010100110100011000110010110001010111001100001110100111010001001100001101111101000001010000010001101101110011010000001111001001010000001101000111100011111101100000010001001001000000111100001110111011110010001010001000011001011101111100001 0011100011100001111111001001101010000100010100011001101100100110001100010011011101110111010000101011000010110001011110101111010100100011111000101011110101001111111011000000000000000010100101000110010001001001000000000100111001111101111001011011101011110100010001111001111101111011110101001001011111010111010110111100101111010101001110111111011010000110100010111101011101011001010100101010011100110100 0010111000101010001001011101111000001010000110010110011010011011000011001111001000000111111011111111101110011011010100010001100001011001010100111111010001011100111100110011100010010000101110100111100110010100011110111000111101101110001111011101001110110000000001011000110101110111011100101101000000111111101000000000000101110100100011000010010000011100100011011101010111111111101101000101011001000010 0001111011100110001000000001110001000100010101001000011100000111111101101110101001111000111001010000000010010110000011101110011100111011101100001010100010000001010011111101110111010100101010000101010101001010010000011000010100101101001100110000001001110101111011011000011101001100011101011000101000001110110001100001011111000100010100011011011000000111011010010000011001010110100000010111101001000111 0001111001100101010010111100110000000001000111110011100101001110110110000001110111000101011100010001110011000101011111100001100110011000011011011101001011001101101001101000110111011011101101110110110111011101000110010110100110101110010011110101001110110011010100101101001110100101011111010100101001111010110001000010101001111010110111100010110111111010001111010101011111000001011110001000101011011101 1100010110000011011111011011011010010100000011101000101001100011111010100001001000101101000101000000110010100110100000111011010110000100001000011111100111001001111100110011110010011101001000011001111011110101011001010001010110101000001000100110110010001110010101010111000001111011001110110100110001110100100100010011110001111000110111110101101001110001110001110101001001000100101110011000011001011110 1101010000110100000110010101110010111101110111100110110100101010011111101111100011101111001111010000101010101011011001011101101010001001010110101010011110111001011001011110101011011100001100001101000111100011101000010011110101101101011011000001101100000111101111000000001011101110011111000001011111000101110000111011011001110110011001000001110100101111111010110011010000101101010011011101110000100110 1001010001110111101001100110101000101110111001110101001110011111000100101001000010000100001011001001001111011100111001000001011000010101001010101001111000110011110010001011100000001101100100101010101000011100001010010111100001011110101101110001110100001101101000001101111011000011000110101011110010001110101010110111101001111111100111101000110100000111010010100100100111101011100001001100110110010110 1010100011101011011001101100001010110010100111001011110100000001111101100010111000000001010100010100110001001000011100101111010010111110111110010100111100001011001000011011000100010011101010000100010101110001011111011101011100011001000010010100111011011110000110000111100101110011111001010110010001001111000111010011111001001001011001110100111110100101010011110011001101110010110111100101000111101001 0110101111010100000110110010011010110100100010100101000100010110110110000100010111110010011111111100000100110001001011111000101011010000011111101110101100010001110011000000010011101111111101011101100000110111001001011110010110010100010011100010001111011010001100010101110001111000011100001001010110100100001110010000101100101001110110000110000001111010010010101001110110000101101010001011001000100111 1110001000011001100111111101000000010110111101111101000000010101110010011001011010110101000100110111101110010101011010110000011111001111111010010110101100000000010101010010001010111101000000101000000110010010001101111011100100100011111001010010110001010101000000111101010100000100111101111000000000000101010001000000111100111110001111111010011000100011111010000101101011010100110000001111010100011000 1100111110111110111010111110100110100110111011010110100101001001111011011101001011001001010010010110010101000000010010111010001001101111110010010010111100011111011010011111111101101110101010010110101010000111100011001100111100011101100110011001110110010000001010101101011100101010110101010010111011101101100000110111101110011000001000000110001101100001100100111000111111100010100101001000100100010001 1001110000010110001110110011010101001111000111100001001111110110100100000011100110010000011111001011110000100110100101001010001011110110010110101111110111010011000111100000101111001011101000111010010001000111011100010111010111001010111001101110011101100110101100111001011111110001100100100111111111100100110010001001001110100110000011110110011001101100010101100101011100110001011001110001111111101011 0001100111100011010011111100000000110010001010100000100110110111111010011010000011011010000100101101100000010101001101010011011001100010011010000010110101110011111010001010101011011000010010111110111011100100010000101001110101101110010100001110101110100110001011011111100011100001001111010111001001001101101010001010100011111000000000010000000110001001000100111000001000010011101111100110011110000011 1101001011011010000001110010101011100111100001001110011111110010010111100001110000001011010000001110010001000101001111110111100010010101101010010000001001101111001101010101001011111110001000011100111001010110111000000010111001011011111000101100010001111011100010010101111110111000110001101111001111011101010100011110101100110010010000000111110010001110010001100011110101000011011110000011000010101011 0110110101110111101111001100101101010000010011100111101111100010100011111101100001110111110110001101000110010000100000110101011100001011100101010111111010000110101110010100101100011011010100100011010111111111101000011101001111011001010011011100110001011001101110001010011101001010100011000100100001010100101111011011001101100010110011010011011010011111110110001110100001011010000110100011100000011110 1011010111001011100100101101100111001110110000101101011111110001001010100100110011100110101001010100111100001110101001010100000011101000111001101111010010011100101101110111111100111100010100001100110111010111100101111010001110011110101000010001101000110000000101100100101000110000000100101100011110100110001111011111101000110110111000111010011001010101000111111010001011011111001001000011000000111011 0000100001000111100001000001001111101001110111010000100100110001000100010101110010110000111001100010011100100100001000101100111111011100000010000001110011001011001111110001101001111011111010011000000110100101100101111010001101111001111100111101001011011100110011000110100111100000100001111101111010110001000100010000100111000010000001010111110001001010110100101101001000100111110110110111010000001110 0011101110100110000101110011110010111101111100001000101000101000111101010010000000001100101001001001100001110101011000110011010001101011110110101011011010011001010001100000010001100000001010000101101100110111000001100011010101100001111000111111010110010010000001001100001010110001110010110010001000001011011111100100101111001101001100011010011111110101001001001001110101110000000111100110100011000010 0010100011011010011010111011010010010110000001000101000011111011100001111100101110101010111000100100101101110010101000000011001100110001010001000100100000101010010011100001001000000101011010100101011110111000001100111101101110011010001110001101101101000001011110010000101110111101110100101101011011001010000001111101011100011100110010010001101000110001011101000001100011110111111100101011001111000011 0111011111101001111010011110010001100000101100011000101101000011101001101100110110111001110100100111101011110110111101010010000001000001101001001110110010011111011011101011111100010100101101001001001110110001111010100011001011011011100001011100001110011000100010100011000110010101001010011001110110001101110101100100010010010110100000111101010010111011001111101000010011110101011010110011010110011100 0000011000010101001110110101000110110100011110111000100110001010000100001010101000100111011001001111001100101011100000100011101101010011000100101010011101010001111001100110111011111000011000111111100110001110000111111100010001100010000100000101100000110101111011100111000011101000101100100110110000011001000101011011011111010100101000110000000110101110111101001100100100111111011111100100011000011110 1010010000010100001110100011010100000101001111111111010010010111010011111100101010011110101011001110001010110111101111000101011000000101001001010011001001000101011010000111101000101110110101110010000000010001110000001111000010111100100110111101001101010010000100100000000010110111111110100001110010101100000010011101001101001000000000100110010111100010111000010011001011111100110001110000100010100010 0000010110100100100101000000100111110111101111101010101111011001001011000110111001001111110101010101000111110110001010011110111110110101101001000011101111101011111110010000110000100111011100101011001010000010110100110010000110111111000111100100001111100011110101111010110001000000000010010010101011111000101110110001010011111110001000111111101100111110011000001011001000000000110100001110010011010110 0101100001000010101111000110001001011001000010011111111000001111111010001000001100101011011010100011110100011100110111000010001000111111111111000001011110010110101001110010110111110001001100001110010100101000111110101111011001000000100101111110001101100101110010101001011101100000111001011011110101011000110001101100011110111010010101001101101110000001100110000011010101000101011001111111000010101011 1011101010101110001111001010000110111110000010001000000010010011101110010001011111111101100110001011110111111111000010010000000001011111001011110101010111011011111100101101110000100010101001110010000110111110010000100001001000100101011000111011100111101000001110100111010111111000010011011011011010101000011110000000001011001100100111001101011001101111011001110101000010111010111011110000100100010111 1011101110110100000011001111110100100010000011100010000001001001010111111000101000111001101111010011011100001110001110111100101111000001010011111100001111011101010110010010110100010101101111010011001010101100000101100101100001101100011010110101111001110100011111101000000000000000100010111111110100111000011110101001010111011101000000100110110011011011000111010110011000011100111110100011110111100001 1111001110001000100111011110011110000001110100010111001010100101010011000000111011000000110101111111110110101101011010010010001011110110110100000110000111011101100101111010110011000111000010110000000110010001011101101100111110000100111010110110000110000010000100110000110011110100001110110001001000101111100011000110110110010010100011110100010001000100010010011111001101010100001001101100011101111101 0011000111110001000101101011111111101010101011101101011100000100000111011110001100111110111100100101101100100001111000010111111101110101010101001011101000000011001110010010011010000110110011010101010111111100111001111100111001111101100101100111010010011101010101011001101011100101110111000101001001100100011111011001111101100001100010111001101010110000111100001000110111000110101101110101111010011111 1011000011110111110010100011110100101110100001001100010111001111110101010100101000001000101000010100110000000110110010101101011111101011100100011111110010110000111111010101000111110101011100111011011110000010000100011100110010001001101011011001010000011100001011001001000100000110011110011001101101011010111110111100110101110011101000100110000101000001010001011000001001001011001011110100000001000010 0000010010000000110110110100001101010101001110100000110001010100011100011111011001011001110010101011001001100000101000111110001000000000000110101011011111110000011010011110111110100101000011110111100010101101010001100000000110010111000100110110000010010100001011001010110000111101010100010101101111100010000011011011100010100101100001000101111011100111101000011101101001010111110101001011001101001101 0110010101011110101000101111000111101000001010100100010110100101100101101100010000101100011101011001101111111101010010011100010100000001001011110011100110011100001100010100110010110010111000111000100100010101110011100000101100110111100001001111011010110111011111101101111111010011101101111110100111100101111100110011001100101010110000111100001001011011110011110100011010110111010011010100011100110111 0001001110001101000101100010110010000000111010111111011000010000011010111010100010110000101001100010101010010100000101010000011010001100111010100100001100100000110110101101100010011011110011011100000010111100001011011011001110101111101010010001010011010111011101101010101101010110001010010001110011110101010001111111101101001011100001111001000001111101000101110100100111101001000011001110110011000110 0101001111111110101011010001111001111000110111111101010111101000101100011000101110100000011101000010010000000100011010111000101110000000010001101110001001011101110000001110101000010101001101110000001100111111001100111101110101010100111100101011101101101101111101000100010010111101010100111001010111010011000110011001100101101000100011011001000001000111000000011011000011111011100110100110100010011001 1001001111011000001110011000000110100001100101001001111001000110100110011100100001011010111100101001101100000111000100010011010011111011110110111110100001101100100111001010101100100000110011111000000101100100001001110100000101111110110001101000010011100011000100000001010010010110001010100010110101100101100010011010001000100010101011111000001000111110011011010111110110101100000001001101010001111100 1100101111011001011010100100110100110110001100001100010111001010010110011110000001011111101100001101111101101010001011010001000001111111100101010101101100010100000111101101100101100011100110101010010100101011011000100001100001000100110010001101100101110011100101101000111100011101001011000111000101011001101011100111100011111001101101111011110010001101101101010010001100100001110000100101011000011000 1101011001110100000101010100110001111111001111000000100001110111011000110000111011001000111110100111000011110000010011010000100101001101001000000100010001100100100011000011000110111011110101100000100011100010101010001010001100100001000010111111001010010010101001110001101011110101011000110001000001100000010011101010111100010011110000010100111010101000011000100000001110000111111111010001111110110000 0101101111010111001111010100110110011111110001000010101010001111100100010011001001011110110011001011001101100010110000101010100101011100111100101011101000000100001101110001100111100001011000010100111100111010010001010110101011110000011011000001101100101001110110110111110101000100110001010101100000011110101011101010100101001000111100000010100110110011000101011110111001010111000010010011100110001001 0111010010101111010100111010101001111000100101111011110101110110010011000100001101001000101111010110011111110000111011101000011010110000000100110110111111010111101011011001110100100011101001000001101100001100111010100001110001110101101001100110110011111110011100101000101111000110100101110111110000101011111100010100111101111001001010110011000010111111101111100010010000101000001110101010010001010101 0101001001100101011010100010111010100111001111100011011110011100101111000110000010100110100011011100111110111001101001110101110011011100101010010110011001001001001000111011100100010100101011011110000010001001010111100101011100101011111010011110101000101101100101000001110011000010110111100000011000100100001111111001000010101001010001001111001011010100110110011111001000001101011110000011000001111111 0011101100110101001000100110100011011110011011100100100110001110000001100001101010011110111010100100101100000010111001110100100100101100010000111000001101001100101110011010100111010000110101100011000101011000110010000001111111001111100011110001010011000111010010100100100011011001011101111001100111110100101010111101111011001001100110011101000111010110101011100000101000110010111011010110001101100010 0100001001101001000101010110111000101111010111110110001100000001101001111010001101111001111000000000110011001101010010011001000111010001100110101110101111011011101001001001100101100001110000000111111011010100001101000001110010010011010101011001110000100010001011100111101100110110010100010000011111001110111111010011010100100111100011100101111101001000000101111000100000001010001100000100011000011001 0101001001011010111101110010011110001011100111110000011010011110001100001111010000100000000010101110100110100110010000110101010101011010111100001001110011010101100101111011101100000100110010010100010111111010011100000000011011100111000111001110111000000110101000010100110000100101010000110000100100001110101001000111110110001010111000000111010110110110101100011010010001010110101010000110001110001000 0000001000100000011001001110101001100100111110110111111111100001010101100110110010101100011000000111001110010000001110110110100001111011110111100111000001100111111000001100101001011010001111101110001001000000000010000111100100011011010001001001110111100001010010010111100010001000111101101001100111011000011001100111010001110011100011000000001111000111111101111010110001101000000110001001010001000111 1100001110101011111101010001110001101001101101111111101000110110101111010010111110001000100011101010001100101011100111001111000100010001001010001110010000110000010001111010110100111001011110111100010101011111100111000001000111010000100011110010100111001011101111110110100111001001001101111101010010110000001100010100100001111101101111011110101111001111100100011110010110010011101000101110101011101000 1100100111100001101101001000101101000111111000100111100110111111000011101001000101010100010100110011001101101111011111000111000100111010101011111010100101001111101100110011101001011100010110010011111010010111001001000010110100101000000111001110101011110111111101001000101011001010001011000011100100011001110111110100110111111010011110010000001011010001111010010010001010110010011010111001110011001011 0011001110010001011001100101001100000010101111111100111101000011001111111110100000111111001000001100010101011101000001111010000111001110011011011111001001010110110011111101010101000100001101011000101111010000011011111011110001110010100011010010111001011010101111111000011010000001101000010011001001011100101100011010111001010001101011010110100110000011010110001010110101111001010011010101110111111001 0101011101100001000111100010110111111101110101101100000000011010111100101000011001101101001010100111110000111011100011110101010101000100101000101001001110001100010101000001011011001101110011001010001101100100011101000101100100101000110111110011010111101110101100101001010001100000101101011110111010011010011010110010100001010111111101010100011111100110110110001001001001110101101100100001001111001111 1110000000101000111011011110111010000011111111101010110010101000111110001100001001010001110000010101011010101110100010100010000101001011101100011011010101100001010111110010001001011100011010110010001100000010101100110001000100001100110110101100010001011010100111110001000110000100111011011011101001100100100010101010101101001001111110100101001011001011011101000010010110111111010010101000101010100101
cTrader AlgocTrader

【cTrader】LineAlert【Tools】

2/22/2021 3/12/2021

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

ラインに価格が触れてから考えたい

水平線やトレンドラインを使ってトレードしてる方にはわかってもらえると思うのですが、こう目安となるラインを引いたところで現在の価格がまったくラインにからまないと何もしようがなかったりしますよね。

とりあえずライン触れるまで待つんだ、話はそれからだ」と自分に言い聞かせてそっとチャートを閉じるわけです。

でも結局ライン触れたかどうか気になってちょくちょくチャートを見てしまったり、見るたびに「ラインからは遠いけど入れそうだな」とか邪念が湧いてきたり・・・ばかばかしいことこの上ない。

もうね、こんな無意味なこと考えなくてもすむように、ライン触れたら自動でお知らせしてほしいわけですよ。

 

LineAlert

というわけで、水平線やトレンドラインに触れたら音鳴らして教えてくれるインジケーターを作成しました。単純なインジケーターなのでソースコードも公開します。好きなようにカスタマイズして使ってください。

 

機能概要

チャート上のすべての線を見張って、どれかに価格がタッチしたら音を鳴らしてお知らせします。

どの音を鳴らすか、水平線とトレンドラインどっちかだけを対象にするか両方対象にするかも選べます。

即時Alertの場合はローソク足当たり1回しか音が鳴りません。次にローソク足更新するまでは複数回タッチしても、別のラインにタッチしても鳴りませんのでご注意ください。

 

パラメータ

TrendLine

トレンドラインをアラートの対象にするか指定します。

HorizontalLine

水平線をアラートの対象にするか指定します。

SoundFile

サウンドファイル名を指定します。ファイル名のみの場合はC:\Windows\Mediaを探します。それ以外の場合は必ずフルパスで指定してください。また.wavじゃない場合は必ず拡張子まで指定してください。

BarWait

ローソク足確定を待つか、タッチ後即アラート出すか指定します。Yesならローソク足確定を待ちます。

 

ダウンロード

(2021/3/12 修正済み 下記参照)

 

ソースコード

using System;
using System.Linq;
using System.Collections.Generic;
using cAlgo.API;

namespace cAlgo {
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class LineAlert : Indicator {
        [Parameter(DefaultValue = true)]
        public bool TrendLine { get; set; }
        [Parameter(DefaultValue = true)]
        public bool HorizontalLine { get; set; }
        [Parameter(DefaultValue = "Alarm01")]
        public string SoundFile { get; set; }
        [Parameter(DefaultValue = false)]
        public bool BarWait { get; set; }

        private List<double> _targets;
        private string _soundFile;
        private bool _isTouched;
        private double _exBid;
        private DateTime _exOpenTime;

        //---------
        // init
        protected override void Initialize() {
            //--- soundFileセット
            if (SoundFile.Contains("\\")) {
                _soundFile = SoundFile;
            } else {
                _soundFile = "C:\\Windows\\Media\\" + SoundFile;
            }
            if (!_soundFile.Contains(".")) {
                _soundFile += ".wav";
            }

            // 最初はこうしようと思ったが、AccessRights.FileSystemが必要っぽいのでやめた
            //if (!File.Exists(_soundFile)) {
            //    _soundFile = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\\Media\\" + _soundFile;
            //    if (!File.Exists(_soundFile)) {
            //        Print(_soundFile + " is not found!");
            //        throw new FileNotFoundException();
            //    }
            //}

            // --- ターゲット設定、更新
            _exBid = Bid;
            _exOpenTime = new DateTime();
            _updateTarget();
            Chart.ObjectAdded += _ => _updateTarget();
            Chart.ObjectRemoved += _ => _updateTarget();
            Chart.ObjectUpdated += _ => _updateTarget();
        }

        //------------------------
        // update target
        private void _updateTarget() {
            _targets = new Listt<double>();
            if (HorizontalLine) {
                var hls = Chart.FindAllObjectst<ChartHorizontalLine>();
                _targets.AddRange(hls.Select(hl => hl.Y));
            }
            if (TrendLine) {
                var tls = Chart.FindAllObjectst<ChartTrendLine>();
                _targets.AddRange(tls.Select(tl => tl.CalculateY(Bars.Count - 1)));
            }
        }

        //-----------------------
        // Calculate でタッチ判定
        public override void Calculate(int index) {
            if (!IsLastBar) return;
            // OnBar
            if(_exOpenTime != Bars.LastBar.OpenTime) {
                _exOpenTime = Bars.LastBar.OpenTime;
                if (_isTouched) {
                    _isTouched = false;
                    if (BarWait) Notifications.PlaySound(_soundFile);
                }
            }
            // OnTick
            if (!_isTouched && _targets.Any(t => ((_exBid < t && t <= Bid) || (_exBid > t && t >= Bid)))) {
                _isTouched = true;
                if (!BarWait) {
                    Notifications.PlaySound(_soundFile);
                }
            }
            _exBid = Bid;
        }
    }
}

本当は最初にサウンドファイルの存在確認したほうがいいです。今回はAccessRights.FileSystemが必要っぽかったのであきらめました。

ポイントらしいポイントもないんですが、線の追加、更新、削除時に対応するため、Chart.Object~のイベントでターゲット更新を行うようにしておきます。チャートオブジェクトを使う場合はこの辺の処理を忘れないようにしましょう。

あとはCalculateでOnBar的な部分を作ってるところでしょうか。最後のローソク足のOpenTimeで確認してます。TickVolumeは値が飛ぶことがあるのであてになりません。確かMT4のEAでも同じでしたよね。if(TickVolume==1)とかしないようにご注意ください。

 

(2021/3/12追記)

たぶんバグあります

申し訳ありません、アップデート用にいじってて気づいたのですが、このコードだとトレンドラインのアラートがうまく機能しないと思います。OnBarでのターゲット更新処理が抜けてます

上記のダウンロードリンクは修正済みです。すでに自分用に手を加えている場合は下記のように1行追加してください。

        public override void Calculate(int index) {
            if (!IsLastBar) return;
            // OnBar
            if(_exOpenTime != Bars.LastBar.OpenTime) {
                _exOpenTime = Bars.LastBar.OpenTime;
                _updateTarget();//←この行追加
                if (_isTouched) {
                    _isTouched = false;
                    if (BarWait) Notifications.PlaySound(_soundFile);
                }
            }

 

(2021/3/2追記)

他のツールにも組み込んでみた

この前作ったMTFストキャスティクスでも音なるようにしてみました。


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

新しいコメント

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

cTrader's Life

© 2025 ajinori