1111010110011100011100101110100001110010101101101000011000110110010010111110011101010011011011101000011101000110100010100101111111010001011100110110111010001011110001011000011010001101000100001000101110110110100100101001100101001110100100100000001101110110001001111100100010001011111111100001110011001111001011111011011111101010000000011110010100101101010100100010111011110100101111111101001011111011 1001011111110010011101010011110100101111000001111001001000010011100011100000010110010011100001110100001000100101010000010011000111001110011001000011100111011100100111010111110111110101010000110110110011101000101110101100100111101111011000101101010100011000000001000101011011101011111000010011111001000000000011010001111101000000000101011010101111001001100111000011010111110000011101101010101100101011 1000011011000111111110100000010111110001110100101010001011001011101010101010010000010010010111110011001110011010100001000100110011101100010101010001101101111011101001110111111101001011000110101111110100011101101010110010001111100001001111001100001100001001000110011011010011000010101010101010010110001000010011110101111100101101111111010001101010001001110000111100010010100001010110011111101100101100 0111001000010011111001100010010111111111010111000000110111000110010101001111111111111101111001000111011101100001100100010000001111000101001101101111100011110010110111000010010001111010011111001011110001101011100000111111110100001101100101010011100111110010110001010011100000010011110111011110111111011001100101111100111110011101001011100000011111101100111100010100010111010100000010000000011101011011 0101000001010111111110000001011010011011001011100001100110100110011011000011000010011111011011110110100111001010111101101011011111100010001010000001111011010101000000100101110011111101111001100111111110001011100011100101111011110010010011100111100100001101010110111111110111011110010001011101111100000011101001100001001110001101001101110111110110100011011101011010001111001000011100111100001110110101 0000100010111110110101011011110011001110011001111011111111111011011000011100010101011111110011100101000000010010101111111111101111100010011010010000001010100010100101011111100001011100101110100011100110000000001000011101001101000010111000010010101010100111111010111001010101010100110101111000111000001111111011111001100110111111111100000111110001001101011000001101100010010000011011010011100111100110 1011101101110100010111001001001110001111011011111001000111001011110001110001011010011000001110011010101010011011110100110100000100100101001100001101000010100100010000010110011100000111001101101011000110011101011110110001100100111010000001001110010000000111001100011000100100100000011101010000000111000100110100111111111011101110000010110000000110101111110011100000100101011010110001000000110100101011 0001011110000101000111010011110000101111011010000111000001001000000011101001001010100010100001001110101001011000000110100100010101001011000011010101001100010011110000001100101100011011111101100011010110101001000000000000110011000111001100001111011011011111000011110111010111001111110011110101011101111001110100110011111000011110100110110100111101110110001101011110001111000000111000110110100000000011 0110110000100111100110001001000010000000110001111101101001100110001101100011011010010101001110100100010001111000110001111101001010101010101011101001111111001110110100011001101111001100110111101100111000110011011010100111000101110110101100110010111000110100110011000000000011101100110000000100001100001110000010011001111000011011011111100000100001111101001011010101100100010011111001000110101101110010 0010111101000100011011011000010011011001111001100101001100100110011001111000110001011001010010110110001101111100110010101011101010001001010100011111011100011111111101000011110011101010101011110101111110010111000101110010000001000011101000100011101111111010000011000110011101011011100100011100110100110101111011011100001000010110000010011001000000100100101101111110011000010011001100001110000010001100 1010111001010101100101000001000110011011001110100001101100011111001111001111101111001001111010111110111111010001010000101011100100011101011110000100101100101110011101010100010011011101110000010011100001011111101000001101110001010001001100001001100011111001001010100001101001101001000011011101010100010001100010010111101100010101000111011110101011100001001010111010010010100001000010101111101110010000 0010010110011111000111011100011001010110111101101110100001110001010001000100011101111101010101111111000010001101001101111100101101010101011110111010111011110100010111010011100010111100010100100111111000001110010101100100111010011101101100110001011100001101101011110111110000110101111010001001111110100001000100100100011011110000100100100011001010000100000101110010011100001010101101111011010110111110 0110011000100000010000010110000100010110100010001100001010000101000101111011010001010010100011000010010001010110011101000001010101100010110001010111001101110001000100001000000111001010001110001001011101111010001110101000010001101001101100000010010101010100010011010110000101100101010011111010011010100001111011100001101000101001001011111010011100111111010111011100101111111011110110001101100010101010 0011111010100111110110100011010100110000011001110110101001001111100111101010101111001010111010100101010010101010011011101001100010101110111001100000111000010010010000001111111010010101100101001111111111011001001100011011000010100001101010010101010000000010010011110111001101101101100001010101100110111011000100101001100100011110101111011110000110110111001111101110110001110011110100011101010101000100 1000010100111101011110101000110111101100111100011111110100101011000011111100001110010101001110100011010010011100100101000110100101011000111011000001110010111000101001001100011101100110111111110100011001010110000101101111101110111101011110010000000001010011011111101000001000110100100111111010111000010100100001101011000111110011101111011110000000011011111111110001110000101001111011111000000011101111 0000110101010111111110011110001011000100111011001111110010010010000001000101101011101100011111000100001101101100111011100001010000101000111111111010010111001001100011110011001000110001100110010111110011111100110011101101000000101011101010000111000000111110111100101000100100000001001111001010100110010111011010110111010110001001011011001010011100101110110001101110011100100000011000001101111110100111 1101100100101001011101011011100010001000001000110011100101011110001100110000010100101001101001010101011000010010011110100100100100100100010110100100111011110100001001010011011101111100111000000100001110010011001011000101010000100110001100010101000100111101111011010000111110001111011001011110010001100010101001111110100101100101110011110100100111011110010011101011100001010000001000010001001001010011 1010000100001001100110000001101100000011010100001010101001100000001011100010000001110100110001011110010000011010000110001010100110011011100110001111000010001110011011001011110100100011100100110101011000010001101111010100110011110000010000110000100111101000110101000011111011110101001010110111100110111100101111001001010100001110100100001011010011101001000001110110111111000000110101001001000111110111 0101001100010011111100001010001100101110000000011101001110011011101110111110011111010101010001110000010111000110111001100010010101011111001000111101001000001110101101001111001011101110000110110001100101000010011010101011001001100110001111100100001001110011111000111010011011111100101111101100101111111011001011100110101011011010111111101110000100111011000100010000010101011110000100010010101010000100 1011100000001010101011110110110010011000110000011101011101011010000000001101101100000110001001101101011101001000010010101000011100001100100111111110110011001001100111000110100111111010010011011011111101111010100000100000111000000001010100110011001000001001011100111111110111111010001000010110100000001010100010010111010100001100111111010011101101011010011110011110001111100000010111111010011010100111 1101010101100001110101110110110001100110010100100000101010000010111111111010110110111010101010010110101101100101101110000001101010011100001001111010100001010100001001111001010011000001001100101100101110100011100000001001101000011101100101110101100011101011101111100110001101111110001001110000010010100111101101011111010100100000111111000101000000011011010001101101010011000000111010101000100010101100 1011111100111100011011001010010111110011100000011010001010101001011001000101100110001001000100101001110001010000111010010110001001010111001100111001100010001111011001101011001100000011000011101010011000000111111101110011101011001111111100110100110110110001011011101111010100111101110100100010001001011001010111001101010110111111100111101100110100111010110010000101001001101101010000001111001001110001 1000111100000001011011000010100100100100111011101110111011011001001011100011010111100101010100100111010000010101111101011001010000010011111001000001100000110101111010001100101010111010111110010101010011110100110111010101000000101100011111011001001000000100010001100110100000101000000000010010010111101101000011001101101011001110111011001010101011010000100010100011001000100100111110101000111101111001 0001011110010100100111100010110010101101011000101011000101100100110110110011011010000000101011100101110101010111011100100010110111110110111110110010111101101011001010111010111011010000100001110011011011011100010101001011011111000101110101110011111000000110001110110100011001000101010011101100010100101111110001011010111010001110100001011011101001011101001101000110010011011001110101110001000110111000 0111000101010100000110101100011101111100001101001111010011001010110011101000011011010111011000100000101101101011111100000101111010111110010111100000010110101100111111000011001101001101111111010111000100100011100011110010011010101110000110010101001010111010001110000011010000010000000110100010101111001110111110111111011101111111101101000000110111000000100000111001111000110101001111111110001101001010 1100000000011110001111110010100011101010110111100000001001100100110110101010101000011101110100100011111111100101011101110011111100000111000101100001011000010001011101000101101101100111100100101110011101000001011001001010100000000000110010000011110011111111011100111101110100101110010101011101100011011010010110011000110100101110000010010001111001110001111001010111100110001011101110101110100011000111 1001010100011000000000110000100000000100111111110111011010110100001111111000110011100100111000001100001110101101010011011111100000101011011110011010011111110110010110100110101101100001001100000100011110011000101011111100001001101110100001100100101001100100010010100100111010100100110001010011010100011100010100111010110000100111001000110100011110101010010010101100011101100110100010101001000001011001 0100010101100100011100101111011100110010100101100100000100100001101111110010011111000010011110100100110111000001100010101101011101101000100100011010100010100011000100011000111101010101100110011110001010110011111010100110100111110100010101110010100011100001001110101100001111111111011011000101010010110111101110001101011110011011100000000111000011100110110101001101101010110011110110111010000000000010 0000111011010100111111110000100110001011100100001100011010010110101000010000110010011010000010000111111111111000001110110001010111011011101110000001100110000100110011100111000000011101000010101001101100110110101111001010101010111111011010001111010100000101010101001111101110011111111110011001001100110100000010101101010101111010110101010001101010001101011100111100001000110011100100010101010010110000 0110001111000100000000100011001100011110110110101101100011011111101000101011010110100000000111101110001100000001001011011101001000010111110101101010001011100011000010011101110111000010001000101110001000101111101111000101010101001001000101111000100011010110011010011110110000111110111110100100111110111001010000010010111001011100101010101110011011111011101111000100110001110010110111101111100010111101 0100110011111111100000011010111111111010001110101011010111110100010101111100010001010100010000000100101011100001100000101010010010101000010010010100111011100110110101001111111111000011001000101011110010010101100000010001111111101110011000001110110010111011101111001010100000101110011010010101010100110010001000011101001110011110010001010001010111101101100010110111001010011110101111100101001110100000 1110000001001110110110111010010110000101011101100011011111011110100110001101000110010011001110101110101111111000100100010101100011111101011110100100010010101110110000001110001111110100110101110011101001110110101000100001111011101000000101011010101001111110000011000001000100111000000001111001010100100011100110000001001110111011100111100100000011001101110010100010111111101010011111010000110000111001 0000001000100110010111010111101101010100100110111000110000011110000111110011110011011001101001001010100100000000110000010110110000110011110100101010011100010010110011111010111110001110001000110011010001011000111011110111010001101111010100010111001101100101010110111101011011100001111000001101101001110101100100000101010010010011101010000000101110000000010011011101100111101010000010010010000001101001 0110111001101101011000110101010101011000001100101101011101001101101010111011100010101100101010101111011011110110101101101010011010101100001011001010111001000000011011111011110010001011011110100100100101100000101110101111101100100110011111110101101001001011010111000110100011000110000010010110001011101111111100101101010100110000011001001100111100011001010000101100100011011111110101000001101000010101 0010000100011111101101001011101011111010001100011110100101001100111001010100011110000101100011101001100111000000101110111110010110000101000010011101011110100111001010011101111111100000100101010101011000001010110100111111010011111001111001001011110111001001000101011100000101101101111001100100000111101011110100010101100000111001001100010010100111001011010000110011100111111001100001100001010001110110 1011011000000100100101000000110100001100100010010010010001100001110011011000001000010011111010011101111001000100101011101101101101000101011001101100011011101010001110001110000000001001111110111111100011001000110111000111010010110100011010100000001010101000000111101010101010000000111011011111111000010110110111110100001001100101011101111010100011111010101011000101000100111110001110100100110100001110 0001101111111111001000111111111111111001101101101010111011100001101101101111011101111001100011000101111101100101100100100010011111011011010101001011100111110010010010100001010100010110010001110001110001110010000111010010010000111101101101000101000101111000101101101010010100001010011010010001001101000010000001110010100110100101100101111011010011101111000110100110111101101011000100111011001010010110 1001110000110010110100110111010000110011100101111100100100100011101000110100010011000100101000000110001011000011111011111000100101111100000001001111111001101001000000000000011011011001001110010100101010011011010110001001100011110001001110000000000000101001001101010110011011010101101111110010001011110111110001001011101100001010100001100101101000110111100000111110010101010100111101011101100001111000 1001101010000001010101000001101100100011000111110100011001101010010001101010001010001100011110111011110101001101011000100011101011010001110100111001111111000101111011000010010010010101101001110000001101000010011000100100110110011010001001000111101100001010010010100110111001001010001111000001000011100111000110000101101010011111011100000110011001100111010110011011011111100101100001101001010010100111 0111010010011110001000010010101111101101010100011101100010111001100110001011110100101100110100101001101100010011110000111010110001110010010110010000001000000111100011110110111111100101110011010111100010111101101001101011101110010100001110111111111100000100011111001111010001111001001000101111110101001100110010100001010100100011111101001100010010000101100011110010110110101101111101110110010000000011 1101010101100000000000100001111110010101001010001101010001100000010011010011011111100111011111101011111011111011100000010011001001111011111101100000000110000101100010001000000001111000010100010010111110001010001001100101010100000010011000101111100100110100000111000000100001110011100100100101011001001100010001010111000111001111101101101100010101101101111101110010100101100100101111001100110011100110 0010001001000001000111010000100111110111011011100101011111001101110111011110010011101101100101010110110001011011001100011011101110000110000110101010100110100001011100110111001011100010000010111101110010010010011011110110110101100000010111101100101101001110011101010111101111001001101010101110100010110101100011000001100010101011010101110101001100100000010001010101000110111101101001110101110011101010 0111101011000111100100100010001010001011111110110001100001111111101001111000000110100101010110111111100011010111101101101100101101110100101101100011011100100011010101100111011100101110111110100011011101000011101001000100010100001000100010000110111011101110010001101010000001011100111111001011111001101001100010010111111001001001111100100011100000000110010001010000100101000100110010100101000010001100 0110000001000111100011101111100110100001111110110001110101011000000101110101010000010010000011011001000001000111100110101101111101011100110101010011010100100101101110001110101001101100110011001010001100111101011100000011101001011101010011011010010110011011010101110001000000110010101001101110100101101010010000110010010100010001001111110000011010111000101100001000000010110110000100010100110111101110 1001101100011110101001110101001111111110110000001100010010001100011011101110001010010001111011000101000011010100100000111000011001010110111011011001110111011100111110110000010000010011010110010001110010001011000001001000101011001111101010000010111000110111111000000011011011011000011001111010011110111111011010111111100110011111101101011010001110010110111101100110000000110100110000011111011010100111 0110000000001011000010010000000110001101001100100101101011010000010100000101110000011000100001100110101110110010101101111111011110100111111111011110100001100001011110111001100101000010100101001010001010011001101000110011000110011111001010000011110001011110001110111011110011011100001110110111110011000000110100001000000111001111000010001100110100100000100010110001111010001001111001111110001111111010 1011011001111101111100100111001000011110110010001000000001110111111011110101000110011101111100011100100011001001010011010111010010010011000110110100010111000001000000111000100000110011010101010110000111010100111110010100100111011000010100101000001011000110001011110100010111101100110100011010001100100000001110110001101110101101111110010111110100110110010100111001101100011100011111000110101111110000 0001011110000010001110100010000101101010011010111111010001010010111111000111010110111101000000001111100010010010010010000001000001101101011000101000010111111110011110111001000000111111011111011101100101111011101101011101101001111101000111110011010101011101101101001010011010010010011010000001000000101111010011111111111111011110100101011011000011110010010010000100011011010101111110110001100001110001 1101110100010100100110000101011001010110011101001101110001111000110100101111101100110001001110111011000101000010110010111111110100110000001100101110011100001010011111001101111110100100111110111011011001111101111010101100100101011101011000000100000110010100110001111001001100110110101000010110110100001010111001110111001011001101101110100001111110100001011110111010111000110101111010100011011110110011 0101000101011101101100111000001011001101110110001001010110111001011101000110101111010001100111111100001010000111000100010110110000111001000011010111101110101100010111001010000000100110100100011111000001110001100010100101110111010000111110111011010111110001101001010001000000101110000111110111111011111101110011001000111101101001010010101011000010000110001011000111010011111011010001100010101000100100 0101011101101110000000011011110111001101000010000111010100100001011000100001011010101111100010011111111110111100111000010111110010100110111000010001110010100110101111100010111111111101000101110011100010000110011100111011100111000000100101011010100000100111111011101111001110011010100010001010000101000110010100000110001011100010111110000100101100000011100001011000010010111000000110000001001111111010 0100100110111010100110101111011011001111010111110011001011011011000101001001111110001111100110101010001001000111111111000010100101100011010001101011101011010110000110010011010001011100011011011111110110011010100011000001100101110001001100101000101111011101100111010001101101000010010110101110110100001101100010000000101100100111101010011111000101000001000110101110100001110111111000100101000110110001 1110111101001001111110001001111011011011111001000111110010101001100010101100101001111101110101101110000110000011011001111110011010111110100101010000100011111000110100111000101100011111101001110101111101101010000111110111001111011000101110010101011011101111101101000110001111111011100100101100111010011110101111101110101101111000010110010011001110001101001111111010000100011110110101000001100011001010 1100010110000010101100110100110011001100110110100010001101011111100000011000011001011010101111101110001000110100001000100010110000110101000110011110101100011110001100010001000111111011100011101111110101110011010010010010011110010010100110101100111100001011011110000010111100000111101000111010110010001101011010010111100000101010011101000110001011010011101110100011000000010000000111001101110000111110 0110111011110111000101000001011101011000001110100110111100011101110010100110011100011110110000110000101100110011111100010000001101011010000001110100110101111000101000001110011010000110100110110011110010101101111100101111000111110001100011000010010010001011101111011111101100111100100101010011101011101010101010001011000010001000001110100110001000101000011111110010111001000000010111000101100110111001 1010010011011010101101111110111000110111110100000111101010000000001011001110000000111000101000110010000000111101001001000110010011100101100101011011110001101100010101110111100100011000011001111010011100100101010000111011111011111001001000000100011000000110011101111010110000101110111001111111011110010001100001110110111101010111010001000100111101011110001101110110010110011011000100011101010111000101 0110001111100110100110001101000100000000111111110101010100010101100110011011000010110010001000100101001001000011101111111010001101101111011110000001000011110101100011101101011011101110111011011110101011011110100001110100100001101000001011111000010000000110111011000100000010000110100110101101100001110100100101111010101011111001111010001011110110010100011011010011101111100111111000100100100101001110 0010011011000011011010010001011111011110101110111101010110111000101101010110000111010000000000101101101001001000111100011100101111111011100011010110000100000101001001111101100110111000001110001001111100101011100101101000011111000101000100011110110000010111000000110101011111010000100111011100110011101001011100110101110011110110110100010101100010100010101101010010100110101010101101010111001011011010 1100100101110010110000000101011001000001001011100111010011000110100100111101011110111000110000011010001101010011010100010000110100101010000101100110110001110010110111001100010110010111110100010010100111010110011110011010000100000110110111101000011011010100100000111100110010011000000111000100110100101001000100101010001010110001001100010101011010110101011001101001110010011011000101010000110011110100 1001010110100100110111111111011110011000010101010110010011000011010100010101101111100011011110001101110001011110001101000000001001100100001100010001011101100001010011100001000111001000000100010111010000100110010001000011011000000101000000101111110010100010101010010010011100100110101000111011101011010111011101101010111001000101101110110111110011101010111101101111101111100011110011000110011110011000 0110100111100110000010011111110011000010010000010111001101010011100101001011100110110001011100011010111111101011100100101101010000011101111101010101110000000111011010111010100001110001010100000110110000010111001001110110010011011001110110100110101001110000101011110000011011111111001100101100010001001010000011011011000010100110011100110000010110110111001000100011011101100000010101101001100100101100 1100110101101011000111101000110011011010000111000011111011011111111010010000101101001110111000000110111001101110110001100110101101110010111100101001001111010010010000111000011000111011010100100001011100101010011001000100010011110000000011111001101100001101001101000111001101001110111000100101110101011011101100100011111011001111110100011101101101101000110001101001110011010001000011111000110010001111 0010101111011010001001100001011110111011110000000110001101110111100001101110001110010001011011000111000100000111000111111110110001011011100001010000011100000110001101011101011100110010101000100111010000100110000011011000101010001000011011100110011011010000010100101110101110001000011101000010010100101000011000000101110001010101111101110100010101011111110101010000001110000100010000011010000010001100 0101001011111010011100010110101001011100101110010111001000000001001001010001111110111011111001111011100011010011001000110101000001000100011111110011110101111000000011011101000011101110101011110011010110001011100110001111010111110111111001010110110010101011110000000001001010111111010011101101011111010000111110100011000100000101010010100110110010010010001101010101100110100001100000101110011011011101 1101011111011010101110111000011001000010100001000001000010010000110011110110010110101011101000001001111000101111100000010000010000011110110110100000010110101111011110011111010010001000001110001100001110111111011011000001010100001001100100010010101011111101101010000101011100111011110011100100110011000101100101100011110101001100011101111100010000011011101010010110011000101100100100010111111010000110 0000111001101001111010000100100000100011010010011011101001100000111010100011011111110011100000010100100101101111110111110010101101100001101011000000101100111011100110111111010101101001110100100000111001011000000100001000011000110101000101001010011111100011001100110010101111010101011000100110001001000011111101100000110000010110011111000110111110110011011010010010110011010010001101000100100110111010 0011110100001101101011111100001011000000011101101100111110101010110010011000101001000001000100000011101011010100101110111101111100000110011101011011100100010011110111011110001111110001101100100100001111001110110011101001100000110101000010001101010100100000111011011000101001101001001100010001011110100001110010001001100011110011010110010011110010110000001000001111110101000011101010001111101011101010 0001010001011000100001000110101001001000101111000011101011110101100001011101100100001011001011011001110001100101010101011010001001111001101011011101011101100010001011011001011001000110010011110111111101101001011000010111010111011110101100000111000110010001001110100100110100111111100101111011111000001001100101010100010110101001000111000011110100101101110101000000110101101111000001000011000011000101 0101000100001010001001001000011001011011001010001110001000100111010010011010101110110010101101000111001111001010011101001001001011011001110100100100101111001100011100011010111001111110011011011101001000010001101101000111001000101101010001100100101101100110011001100110100101011111000101101100011000111100000110100011101111111100101011010110110000001100101001101011110110010001011111010101100100011000 1001111111101011001011001111000000110111111101001011000011111110110010100100011101000011101100110101001001010001000010011111110001011010110110011001011010010010101000100111001000110100011100110101101111101001110110111111001010000100010010101100111010101011011000001011011001001001100110010111000000110001010110001011110001101111110101010101001101011110101000110110011101001100111011100001100010110101 1011000011111110001110101000010010101110110101111100100100101100010001010001100111110100000011010010000001010100100110000001000011101111110111111101101010001001011100011000010000101011110000101001111010011010010011000010100100001110100000010100111001100100000000110101101000100011010011111010100111001110101011100100011010100010011001100001001001111001011110110000100011100000110011111111000110010110 1010010010000000011010010101010110100001010000111000111100101000101001111101010011001110100111101110110111001100010011110110111101101000001111111100010100101101001111011100111010010001101001111101010000111000000110111101100100000111111110011001000010111000110001011100111110010011011101000001000010001010011011100001101101110011100000000001001101101101111111100010011011000111001101111000111011111100 0010111000111011000011000101110110111000001111100001000001010010100001010110000001001001100100001011101000000010110000010010010101111011011010001011100100000010100101011011010100110111001011001111000111110110110010000011101101100001101001011000101110000101011000000000011001010100101010011110110110011100000001001001100011011111000000111010001000111011100101010100010101011011001010110010110111111010 1110110100001000111101011101010111110000011100101101111110010110000011001110100010010100010000100100001000001000010111101010111101011100010010100001100110100111111101000011101011011111001010110000110101111010011001000111001001101110011101001011110110111110101110011010100100011100101001110000010011000001111011110110000010011110001001100001111110110110100110110100111111110111101101111001011011100000 1001111110111110100111101111011101101100000100101011011011000000101000110011110010010001011111100000111011011100111000111001011001001000000011010111111000111100010010000011000011000011000010101001001010101100110100011010111101111001011001011011111110100000010000111100001001010000001101011110001011000111001110000101101100010110001100010111011011011001011011110001110101000101110010101010100000010010 1100001110110110010011000001100111101011001000111001110111110011100001101000100001100011001010000101111000001110000011111110000100110011101011101100011000100100101100010100110100000001000100001010011010010100101111001111001010011010110110001010010000010000011000010011111100011101010110010011011111011110000001010110110100000001011111000010110110111100001010100111100100000001100100010101100000101001 0100011000100100010010011001100110100100111111010100011001010000001100011000100110100010001000011011110011100010001001111110000101001000001010000101011011110101001011011011110101010011010110110001111110100110010001101111111100100110111011010111111111111001001000110000001011111110001101100001001111100000010110101001100100110110011011111111110100111111111110011010011111011100110110001110010000101101 1101110111111110111011000101110011011101100000011010000111001111100100111001000000110111011011010101001111011101001110110100011110000100111011111101001010111011101100001011010000100101010010101111011100000000101011010110010111000111111011001110010111010010011001001110100111001010110101110001110010111101001101101011101001111101011000010110111010010000001001001110001110100101010001110010100111011100 1101111010011110110111001110110101100111111110001101111001111010011111100101010001000100101000001000011001000111101010001011001001110000100000110001001101010101101100111100110110100011100000100100001100010101011110010100011000001101101100000001100001000111100110011111100110110111011001001010100101010111010010101111011111011100111101111110010101010011011010111100001011100101000100010001001101101001 1001000110010001011010101000010111010100101011111001111100000000111100100111011101111111011011110011010001100000011000111100000010111101001011100111000101111011111110100110001101011010010101001001010100101001111000110111001110110001100010110011100010101000000001011010101111110011010110111000000100110100111000101101111001011011011111001111001011001100000100110010011011001011110101000000011100011100 0011111100000000110101111101011111101110011011101111111000111111001110001010011011101011011000011101100001000000010100110001111010100001111111101100100101000111001000101101101001011001001110001010011110101101111001100000010010101011011000110110000010001100100111101010111110001111100111100110011011001001111110010001001111101010100101011010011011010111010011111111101111101101010011101000100100111000 0100001000010101101101001011111111001011001111101000011110101111000000100101011000010000011111000110000000001101111101111101010001010001000110001011100011101110100110110001111000011110110010110001111001010100101010000010000101000111100101101010010010111011000000111110111001010101111000010011100100010100100100111101101110111110000110101000111001111010101010001010100111101101000110010001110011100000 1110110111101000011101000101111001111111101111110101011000000001111110010101100101110000010100101000001011011110100101110100100010101010101000001111010101110100101001101011001101111000011000011110011101110011100110110001011011110001001111011100111001110001011111101100100111110111110110010110100010010010110111111110111100111101100010110000101111001101000101001110001110001101000111111110101010101110 0111111110011011110001001010010010011100000101001010110000111101001110101100111100100110011010001001000000001001100100110011110100001110000101111000001100101001000011001001101010000100011010110100110110011011000011100001010111000001101110000101100100011001111000011000110001011111110000001001011011110011001100101010100001000000011110000000110110010101100001110001010101010000001100000001100101100001 0101010001010100011111110011011010011001100011000000001011001011001011000111100100001010010101011110000001100100101001010010001100000011111111111100101111101100010011000000010110100001011101111001110000111010110101000111100011100110010110110101111110111010001010100100011000110101010111010101111101111010010010100110110110010110010111111011001101011010111111101001100111000111101010110011101010001101 1100100111001100000110001001110110011111011010101010110010101100101100000010001110101111001111100100100010000111100100000110011111001011001111010001110100111011010111000111010001010000111101010110100011101110111000011011110101100010010000001111100011011101110101011000110011111111000111111011111110101110100101110000011110011011011110011000011001111001111111001001011011010001101111011101111111111111 0111100001000110110000110010010000101001000111101111111100000011011010111111100111111111110101011001110100101011111011011111110111110011110000100011111000011000111001010101010011010110001011101000100101000101101001101111010000100001111110010001000100010000110100101110000111100001111011001010101000011100100101000101100010001011001000100110111001001011000000001100001011001101110100011111101011000010 1001111011100001010100101000001001111110101111011010000110101101000111011011010010011000010010010111111011100010101101000011001001010001110111111111000010010110010000111111110110000001100001100111000111010101010111001011111001111010010110011000101110011101001011111100010001100010101100100101011001100110101110101110100101110100010000001110011011111011110100000110100000001011000100001000101100001000 0110010100010100111110011001110101000010011111111110011111000100000001110101101100101000011111000000111011000101001101010101000010011100001100100001110111001100100111111010001010100111001010111001100111110000010001110011011010110111101010110011010101000100100001010000000011010000000110110101111100011010010111100101111101101010001110011000011010111111101100100110000011110101001000111010110010000100 0110000010100000111001010111011100111100110000010001111101111101000111000110001111011001101111101010001111000011111001110110101110110101110101101010110111001111010011100101001010001101110100101100001100010110110011110000110010100110111100110011110001111110000010000000001101010000111000111010110010110101101110111011100110100011111101101100110110110110011100100001110100000100101010100101001100000111 0010001111001000011000010100001011110100001110010110101010011000000010010110000101001101101111011111110101011001111100000000101100110011000011110000111110011111101111011100000100000111101110010100100100111010000101111111010110110110010010011010100101000011001110010110100000111001100011111001110000111000110011000001110111011011100000010101101100001110001111001000010011110101010111101101100011010000 1100001001001011101000110100101111111101000000001010010111011010000100000110001101010001101010110111010111010101010011111110001000101010001000111111110000001101100100000111001111011100000110001011100101101110000111001101101011110011100101001000100011000001010101100101000011010001100001111101000001111011011000111100101101001111110101110001110001111111000010011100100110000110001001000001011000110000 0100011001110001101111101110101100110111101000111011111001110001000111010000101111111000111100101011000011001111100001110111111101011100110011001110000100010010001100001111011111110111011110000011001011101010010110001001011110011010110110000101101010010001011101110011100010001000100001100101111110101110110010111011011110110101101101001001010011010100111100010000011110011010110010001100111100111101 0011010010010100101000101000110111000001010100000110111000100100010100111001001110000101101010001110100010010010101110001101101110101010100111100111001110011100110111111101100011111111101100111101111011111011000100101111011100100100000111001010000100011111001010000101000001110011001101110000110110001100001011010001100100010100111010101100010000000011001001001001011101100100000111111110001100001001 0110000010100111101101001010000000011010110101111110111001011110001011010001001111111101001100010100110011111111001010001001101101000101001110010010100111011010110111001100100000100010110010111000010001000011010000001100110000010110111101101011111000010001101001000010011001000000100101001001111101001010001111110100001010110001010100000100010011101100100111101111010110110000100010110100110100011011 1101000110111000111110100110011111010011110100000000110000001001101010010010101001101011000000110010010100001110010111100111101011010111111101011000110000011011011000001110000001010011010111010010001100111110111010011000000100110010111000011011001111011010000100101001111000110011110000010101110111101101010111111110000100101011110001000000110010000001111000111110011010010100000010001100100100001011 1001001010100010110010011101110000000101010110111010011110001100001111011001001011111011111011011111110001010000111000110001010010100001011011101000101110110001010010100100010011011001100101101101100011000111110010100111011001111101011110010010101101011101010001010101011111110100001100100101011100010110100100010011100100001000111110001101111111101111100000101010010101000001101001100000011110000100 1001010010101100110010110100100100101110111001101011111111001010000001010011001100110101110010001010001100101010111010000010110001111010111000100111001011011100000110011001100101011100001111001110010100001011001000000001010010111110100011111110011000010010001000100010011111011010010111001101110100000111011101100111011001110110011100000001111101001101111011010011101100110001110010001101100001001001 0110100001100100111010000011000110000001101000010101010010110011001101110010011011101000101000110000000011011100110010010100110011011110100101010001100101000011100000100101011110001010000000100001101111111110010010100010110000111010101010110100110110000001101001100011011001110110110100001000101100010111101011100000000101101001011111010001000001010010101011101110000011000110010101111001110110011000 1101001010001110010011110100111111101000101010101110000110001001010111101001011110101111110000001000101101100010011001000010000101011001101011011101010100101100001110100001111010011011101111010011111101011111111101010110010001101111110101000000100010001100001100101000010110010001101101100101011001110011100000101011001101110111000110100110101111010100010001010000001001011101101110100001111011110100
cTrader AlgocTrader

【cTrader】VS CodeでcBotを作る方法【Automate】

8/11/2022 8/13/2023

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

cTraderがなくてもcBotが作れる!

cTraderなしにcBot作る人なんているのかわかりませんが、まぁとにかくcTrader4.2からはcBotやインジケーターを作る際にcTrader本体は不要になりました

これにより開発環境の縛りが一切なくなったため、普段使い慣れた環境でcBotやインジケーターが作成できます。

ここではVS CodeでのcBot開発方法を紹介しようと思います。Windows前提で話は進めますが、MacやLinuxでも適宜読み替えていただければ開発自体は可能です。

あえて「VS Codeで開発したい!!」と思う人なんてVS Code使ってる人以外にはいないと思うので、VS Codeについては詳しく説明しませんし、この記事はある程度プログラム経験がある方向けと思って書きます。

 

cTrader公式ページ

なお、VisualStudio Codeを使った開発方法については公式でもちゃんと説明があります。

Using Visual Studio / Other .NET IDEs – cTrader Automate API

以下はこの公式の情報を参考に手順を解説したものです。

 

(2023/8/13追記)

cTrader 4.8以降ではVS Codeでの編集に対応済み

cTrader4.8からは組み込み開発環境のツールバーから「Visual Studio Codeで編集」を選ぶだけでVS Codeが利用できるようになりました

下記の手順は基本的にcTrader 4.7以前をお使いの方向けの説明です。

(cTrader4.8以降だとしても.Net 6 SDK & C#拡張機能までは必要です。)

 

VS Codeを使ったcBot開発

ちなみにIndicatorも最初にフォルダ作る場所が違うのと、コピペするテンプレートが違う以外は完全に同じです。

前準備

.Net 6のSDKが必要です。SDKだけ入れてもいいですが、何も考えずにVisual Studio 2022をインストールしてしまうのが楽です。

Visual Studio 2022 の新機能 | 無料ダウンロード – Visual Studio (microsoft.com)

画像のCommunity2022をクリックするとダウンロードされますので、それを実行します。

インストーラーが準備されこの画面がでたら.Netデスクトップ開発だけチェック入れてインストールしておけば必要なものが一式入ります。

 

VS Codeの拡張機能

VS Codeはインストール済みですよね?

C#拡張機能が必要です。入ってない場合は追加しておいてください。

必須の拡張機能はこれだけです。

この先も一応説明しますが、この後の手順は自動化スクリプトを用意しましたので、よかったら記事最後のダウンロードリンクからどうぞ。

 

フォルダ作成

マイドキュメントのcAlgo/Sources/Robotsに新しいフォルダを作成して好きな名前をつけます。HellocBotとでもしときましょうか。

そしたらこれを右クリックして「Codeで開く」を選択します。

「Codeで開く」がメニューになければシェルでも開いてcode ./HelloCBotとでもしてVSCodeでこのフォルダを開いてください

 

プロジェクト作成

VS Codeが開いたらターミナルを開いておいてください。Ctrl+Jで開くはず。

あとはここに公式にある通りのdotnetコマンドをひたすら打ち込むべし。

dotnetコマンドはVisualStudio入れてれば使えるようになってるはずです。(多分SDKだけでも使えるはず。)

HelloCBotの部分は自分でつけた名前に読み替えてくださいね。

dotnet new sln
dotnet new classlib --name HelloCBot -f net6.0
dotnet sln add .\HelloCBot\HelloCBot.csproj
dotnet add .\HelloCBot\HelloCBot.csproj package cTrader.Automate

順番にソリューションの作成 – クラスライブラリプロジェクトの作成 – プロジェクトをソリューションに追加- cTrader用のNugetPackageを追加しています。

(cTraderのcBotやインジケーターの実態はライブラリなのでクラスライブラリプロジェクトとして作成します。)

 

テンプレートをコピペ

Class1.csというファイルにcBotテンプレートをコピペします。Class1.csという名前が気に食わなければ変えても構いません。

このファイルがcBotのメインソースコードになり、cTrader組み込みの環境で開いたときはこのファイルが表示されます。

ここにcBot用テンプレートをコピペします。

using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None)]
public class MyRobot : Robot
{
    [Parameter(DefaultValue = "Hello world!")]
    public string Message { get; set; }

    protected override void OnStart()
    {
        // To learn more about cTrader Automate visit our Help Center:
        // https://help.ctrader.com/ctrader-automate

        Print(Message);
    }

    protected override void OnTick()
    {
        // Handle price updates here
    }

    protected override void OnStop()
    {
        // Handle cBot stop here
    }
}

インジケーターならこっち。


using cAlgo.API;

namespace cAlgo;

[Indicator(AccessRights = AccessRights.None)]
public class MyIndicator : Indicator
{
    [Parameter(DefaultValue = "Hello world!")]
    public string Message { get; set; }

    [Output("Main")]
    public IndicatorDataSeries Result { get; set; }

    protected override void Initialize()
    {
        // To learn more about cTrader Automate visit our Help Center:
        // https://help.ctrader.com/ctrader-automate

        Print(Message);
    }

    public override void Calculate(int index)
    {
        // Calculate value at specified index
        // Result[index] =
    }
}

 

cTraderで「新規作成」したときにでてくる初期テンプレートですね。

ここからあとは好きに編集してください。

 

ビルド

ビルドもコマンドで一発

dotnet build --configuration Release

ソースコード付きならこう

dotnet build --configuration Release -p:IncludeSource=True

 

出来上がり

ここまでで(Windows環境なら)もうcTraderで使える形で配置されています。

実際は作ったものを動かしてみないとなんとも言えないのでcTraderを一切開かずに開発するというのは非現実的ですが、ちょっとしたインジケーターであればAutomate画面は一切開かずに作れちゃいますね。

 

一つずつコマンド打つのが面倒な人へ

「VS Codeは使いたいけどdotnetコマンドで一つずつ作ってくのめんどくない?」という私のようなものぐささんのために(というか私のために)コマンド一発で新しいcBotやインジケーターのテンプレートを作成するスクリプトを用意しました。Windows専用です。

 

ダウンロード方法

下記リンクをクリックするとブラウザ上に中身が表示されます。コマンドが羅列してあるだけなので、なんとなく何してるかわかると思います。

(2023/5/7 追記) PCに.net7が入ってると7を使おうとしてしまいビルドできないため、フレームワークを.net6指定にしました。 (追記終わり)

使用する場合は右クリックから「名前をつけてリンク先を保存」を選んでパスの通ってるところにダウンロードしてください。

 

使い方

ctindi 新indicator名
ctbot 新cbot名

このコマンドで勝手にプロジェクト作成からテンプレート挿入、VS Codeを開くところまで一気にやってくれます。

ついでにビルドタスクも作るのでVS CodeでCtrl+Shift+Bでビルド可能になります。

 

使用上の注意

コマンド実行用です。ダブルクリックしないでください。(多分何も起きません)

また、実行には.Net6 SDKとVisualStudioCodeがインストールされてる必要があります。ない状態で実行すると中途半端にフォルダとか作られた状態で落ちると思いますのでご注意ください。

ざっと作って自分で使ってるだけであまりテストしてません。自己責任のもと利用いただけるようお願いします。

なにを血迷ったかbatファイルなんぞで書いてしまったのであまり編集したくないのですが、おかしなところくらいは直しますので言ってください。

使う人が多いようであればなんかしら別の方法でちゃんと作ります。

 

(2023/5/9 追記)

Windows11での注意点

Windows11ではOneDrive同期が自動的に有効になっており、そのままだとcAlgoフォルダがOneDriveフォルダ内に作られてしまうことがあるようです。この場合はbatファイルはそのままでは使えません。(動きますが、ソースコードが別のところに入ってしまいます)

そもそもこの機能、無料のままではすぐに容量不足のエラーに見舞われるやっかいなものですので、OneDriveに課金予定のない方はWindows11を使い始めたらまずはOneDrive同期機能をOFFにすることのをお忘れなく。(私は気づかずあとから面倒なことになりました・・・)

OneDrive有料会員の方は同期機能を使う方もいるかもしれません。その場合に上記batファイルを使うなら内部のフォルダ名を書き換えて利用してください。

 

(2022/8/17 追記)

新規作成後インテリセンスがうまく効かない場合

私の環境だけかもしれませんが、新規作成後にomniSharpのエラーがでてインテリセンスが効かないことがあったので、解決方法をメモしておきます。どうもスクリプトの使用有無にかかわらずときどき起きる現象のようです。

  • dotnet clean
  • obj/Debug下の.Net6.0をフォルダごと削除
  • ビルド
  • コマンドパレットから restart omniSharp  する

これでインテリセンスが効くようになるはずです。


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

新しいコメント

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

cTrader's Life

© 2025 ajinori