Read data from a 1 bit file where each byte encodes 8 bases.
        
        Parameters
        ----------
        d : array
            byte array
        l : tuple
            chr, start, end
        
        Returns
        -------
        list
            list of 1s and 0s of length equal to the number of bases in
            the location.

def _read1bit(d, l, offset=False):
        """
        Read data from a 1 bit file where each byte encodes 8 bases.
        
        Parameters
        ----------
        d : array
            byte array
        l : tuple
            chr, start, end
        
        Returns
        -------
        list
            list of 1s and 0s of length equal to the number of bases in
            the location.
        """

        s = l.start - 1

        length = l.end - l.start + 1

        ret = [0] * length
        
        if offset:
            bi = s // 8
        else:
            bi = 0
            
        for i in range(0, length):
            block = s % 8
            
            if block == 0:
                v = (d[bi] >> 7)
            elif block == 1:
                v = (d[bi] >> 6)
            elif block == 2:
                v = (d[bi] >> 5)
            elif block == 3:
                v = (d[bi] >> 4)
            elif block == 4:
                v = (d[bi] >> 3)
            elif block == 5:
                v = (d[bi] >> 2)
            elif block == 6:
                v = (d[bi] >> 1)
            else:
                v = d[bi]
                bi += 1
            
            # Only care about the lowest bit
            v &= 1
            
            ret[i] = v
            
            s += 1
    
        return ret