#include <bits/stdc++.h>
using namespace std;
long double eps = (long double)1 / 1e6;
long long inf = 1e18, mod1 = 1e9 + 7, mod2 = 998244353;
template <typename T>
T sqr(T a) {
  return a * a;
}
template <typename T>
T qb(T a) {
  return a * a * a;
}
long long gcd(long long a, long long b) { return !a ? b : gcd(b % a, a); }
long long binpow(long long a, long long b, long long mod) {
  return b ? (b % 2 ? (a * (sqr(binpow(a, b / 2, mod)) % mod)) % mod
                    : sqr(binpow(a, b / 2, mod)) % mod)
           : 1;
}
long long binmult(long long a, long long b, long long mod) {
  return b ? (b % 2 ? (2 * binmult(a, b / 2, mod) + a) % mod
                    : (2 * binmult(a, b / 2, mod)) % mod)
           : 0;
}
long long a[100001], st[400004], kol[400004][21], dg[21];
void build(long long l, long long r, long long v) {
  if (l == r) {
    for (int i = 0; i < 21; i++) kol[v][i] = (bool)(a[l] & dg[i]);
    return;
  }
  long long m = (l + r) / 2;
  build(l, m, 2 * v);
  build(m + 1, r, 2 * v + 1);
  for (int i = 0; i < 21; i++) kol[v][i] = kol[2 * v][i] + kol[2 * v + 1][i];
}
long long get(long long tl, long long tr, long long l, long long r,
              long long v) {
  if (l == tl && r == tr) {
    long long sum = 0;
    for (int i = 0; i < 21; i++) sum += dg[i] * kol[v][i];
    return sum;
  }
  long long m = (tl + tr) / 2, kl, res;
  st[2 * v] ^= st[v];
  st[2 * v + 1] ^= st[v];
  kl = m - tl + 1;
  for (int i = 0; i < 21; i++)
    if (st[v] & dg[i]) kol[2 * v][i] = kl - kol[2 * v][i];
  kl = tr - m;
  for (int i = 0; i < 21; i++)
    if (st[v] & dg[i]) kol[2 * v + 1][i] = kl - kol[2 * v + 1][i];
  st[v] = 0;
  if (r <= m)
    res = get(tl, m, l, r, 2 * v);
  else if (l > m)
    res = get(m + 1, tr, l, r, 2 * v + 1);
  else
    res = get(tl, m, l, m, 2 * v) + get(m + 1, tr, m + 1, r, 2 * v + 1);
  for (int i = 0; i < 21; i++) kol[v][i] = kol[2 * v][i] + kol[2 * v + 1][i];
  return res;
}
void update(long long tl, long long tr, long long l, long long r, long long v,
            long long x) {
  if (l == tl && r == tr) {
    st[v] ^= x;
    long long kl = tr - tl + 1;
    for (int i = 0; i < 21; i++)
      if (x & dg[i]) kol[v][i] = kl - kol[v][i];
    return;
  }
  long long m = (tl + tr) / 2, kl;
  st[2 * v] ^= st[v];
  st[2 * v + 1] ^= st[v];
  kl = m - tl + 1;
  for (int i = 0; i < 21; i++)
    if (st[v] & dg[i]) kol[2 * v][i] = kl - kol[2 * v][i];
  kl = tr - m;
  for (int i = 0; i < 21; i++)
    if (st[v] & dg[i]) kol[2 * v + 1][i] = kl - kol[2 * v + 1][i];
  st[v] = 0;
  if (r <= m)
    update(tl, m, l, r, 2 * v, x);
  else if (l > m)
    update(m + 1, tr, l, r, 2 * v + 1, x);
  else
    update(tl, m, l, m, 2 * v, x), update(m + 1, tr, m + 1, r, 2 * v + 1, x);
  for (int i = 0; i < 21; i++) kol[v][i] = kol[2 * v][i] + kol[2 * v + 1][i];
}
int main() {
  cout.tie(0), cin.tie(0), ios_base::sync_with_stdio(0);
  long long q, n, i, t, l, r, x;
  cin >> n;
  for (dg[0] = 1, i = 1; i < 21; i++) dg[i] = 2 * dg[i - 1];
  for (i = 1; i <= n; i++) cin >> a[i];
  build(1, n, 1);
  cin >> q;
  while (q--) {
    cin >> t >> l >> r;
    if (t == 1)
      cout << get(1, n, l, r, 1) << '\n';
    else {
      cin >> x;
      update(1, n, l, r, 1, x);
    }
  }
  return 0;
}
