#include <bits/stdc++.h>
using namespace std;
const int MaxN = 1e5 + 5;
int a[MaxN], n, q;
struct node {
  int l, r, sum[25], lazy[25];
  inline int len() { return r - l + 1; }
} T[MaxN << 2];
void PushUp(int rt) {
  int lid = rt << 1, rid = rt << 1 | 1;
  for (int i = 0; i <= 21; i++) {
    T[rt].sum[i] = T[lid].sum[i] + T[rid].sum[i];
    T[rt].lazy[i] = T[lid].lazy[i] ^ T[lid].lazy[i];
  }
}
void PushDown(int rt) {
  int l = rt << 1, r = rt << 1 | 1;
  for (int i = 0; i <= 21; i++) {
    if (!T[rt].lazy[i]) {
      continue;
    }
    T[l].lazy[i] ^= T[rt].lazy[i];
    T[r].lazy[i] ^= T[rt].lazy[i];
    T[rt].lazy[i] = 0;
    T[l].sum[i] = T[l].len() - T[l].sum[i];
    T[r].sum[i] = T[r].len() - T[r].sum[i];
  }
}
void Build(int l, int r, int rt) {
  T[rt].l = l, T[rt].r = r;
  if (l == r) {
    for (int i = 0; i <= 21; i++) {
      T[rt].lazy[i] = 0;
      if ((1 << i) & a[l]) {
        T[rt].sum[i] = 1;
      }
    }
    return;
  }
  int mid = l + r >> 1;
  Build(l, mid, rt << 1);
  Build(mid + 1, r, rt << 1 | 1);
  PushUp(rt);
}
long long query(int l, int r, int rt, int pos) {
  if (l <= T[rt].l && r >= T[rt].r) {
    return T[rt].sum[pos];
  }
  PushDown(rt);
  int mid = T[rt].l + T[rt].r >> 1;
  if (r <= mid) {
    return query(l, r, rt << 1, pos);
  } else if (l > mid)
    return query(l, r, rt << 1 | 1, pos);
  else {
    long long res = 0;
    res += query(l, r, rt << 1, pos);
    res += query(l, r, rt << 1 | 1, pos);
    return res;
  }
}
void update(int l, int r, int rt, int val) {
  if (T[rt].l >= l && T[rt].r <= r) {
    for (int i = 0; i <= 21; i++) {
      if ((1 << i) & val) {
        T[rt].sum[i] = T[rt].len() - T[rt].sum[i];
        T[rt].lazy[i] ^= 1;
      }
    }
    return;
  }
  if (T[rt].l == T[rt].r) return;
  PushDown(rt);
  int mid = T[rt].l + T[rt].r >> 1;
  if (r <= mid)
    update(l, r, rt << 1, val);
  else if (l > mid)
    update(l, r, rt << 1 | 1, val);
  else {
    update(l, r, rt << 1, val);
    update(l, r, rt << 1 | 1, val);
  }
  PushUp(rt);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  Build(1, n, 1);
  scanf("%d", &q);
  while (q--) {
    int op, l, r, x;
    scanf("%d %d %d", &op, &l, &r);
    if (op == 1) {
      long long ans = 0;
      for (int i = 0; i <= 21; i++) {
        ans += query(l, r, 1, i) * (1 << i);
      }
      printf("%lld\n", ans);
    } else {
      scanf("%d", &x);
      update(l, r, 1, x);
    }
  }
  return 0;
}
