#include <bits/stdc++.h>
using namespace std;
long long sum[111117 << 2][30];
long long lazy[111117 << 2];
long long ret;
void pushup(int rt) {
  for (int i = 0; i <= 20; i++) {
    sum[rt][i] = sum[rt << 1][i] + sum[rt << 1 | 1][i];
  }
}
void pushdown(int rt, int m) {
  if (lazy[rt]) {
    lazy[rt << 1] ^= lazy[rt];
    lazy[rt << 1 | 1] ^= lazy[rt];
    int x = lazy[rt];
    for (int i = 0; i <= 20; i++) {
      if (x & 1) {
        sum[rt << 1][i] = m - (m >> 1) - sum[rt << 1][i];
        sum[rt << 1 | 1][i] = (m >> 1) - sum[rt << 1 | 1][i];
      }
      x >>= 1;
    }
    lazy[rt] = 0;
  }
}
void build(int l, int r, int rt) {
  memset(sum[rt], 0, sizeof(sum[rt]));
  int te;
  lazy[rt] = 0;
  if (l == r) {
    scanf("%d", &te);
    for (int i = 0; i <= 20; i++) {
      if (te & 1) sum[rt][i] = 1;
      te >>= 1;
    }
    return;
  }
  int m = (l + r) >> 1;
  build(l, m, rt << 1);
  build(m + 1, r, rt << 1 | 1);
  pushup(rt);
}
void query(int L, int R, int l, int r, int rt) {
  if (L == l && r == R) {
    for (int i = 0; i <= 20; i++) ret += sum[rt][i] * (1LL << i);
    return;
  }
  pushdown(rt, r - l + 1);
  int m = (l + r) >> 1;
  if (R <= m)
    query(L, R, l, m, rt << 1);
  else if (L > m)
    query(L, R, m + 1, r, rt << 1 | 1);
  else
    query(L, m, l, m, rt << 1), query(m + 1, R, m + 1, r, rt << 1 | 1);
}
void update(int L, int R, int x, int l, int r, int rt) {
  if (L == l && r == R) {
    lazy[rt] ^= x;
    for (int i = 0; i <= 20; i++) {
      if (x & 1) sum[rt][i] = (r - l + 1) - sum[rt][i];
      x >>= 1;
    }
    return;
  }
  pushdown(rt, r - l + 1);
  int m = (l + r) >> 1;
  if (R <= m)
    update(L, R, x, l, m, rt << 1);
  else if (L > m)
    update(L, R, x, m + 1, r, rt << 1 | 1);
  else
    update(L, m, x, l, m, rt << 1), update(m + 1, R, x, m + 1, r, rt << 1 | 1);
  pushup(rt);
}
int main() {
  int n, m, fg, l, r, x;
  while (~scanf("%d", &n)) {
    build(1, n, 1);
    scanf("%d", &m);
    while (m--) {
      scanf("%d", &fg);
      if (fg == 1) {
        scanf("%d %d", &l, &r);
        ret = 0;
        query(l, r, 1, n, 1);
        cout << ret << endl;
      } else {
        scanf("%d%d%d", &l, &r, &x);
        update(l, r, x, 1, n, 1);
      }
    }
  }
  return 0;
}
