#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 1;
const long long MAXSEG = 21;
long long N, Q;
long long ar[MAXN];
bool lazy[MAXSEG][4 * MAXN];
long long segTree[MAXSEG][4 * MAXN];
void buildSegTree(long long id, long long at, long long l, long long r) {
  if (l > r) return;
  if (l == r) {
    if (ar[l] & (1 << id)) segTree[id][at] = 1;
    return;
  }
  long long mid = (l + r) / 2;
  buildSegTree(id, 2 * at, l, mid);
  buildSegTree(id, 2 * at + 1, mid + 1, r);
  segTree[id][at] = segTree[id][2 * at] + segTree[id][2 * at + 1];
}
void lazyPropogationSegTree(long long id, long long at, long long l,
                            long long r) {
  if (lazy[id][at]) {
    lazy[id][at] = false;
    segTree[id][at] = r - l + 1 - segTree[id][at];
    if (l != r) {
      lazy[id][2 * at] = !lazy[id][2 * at];
      lazy[id][2 * at + 1] = !lazy[id][2 * at + 1];
    }
  }
}
void updateSegTree(long long id, long long at, long long l, long long r,
                   long long ul, long long ur) {
  if (l > r) return;
  lazyPropogationSegTree(id, at, l, r);
  if (r < ul || l > ur) return;
  if (ul <= l && ur >= r) {
    lazy[id][at] = !lazy[id][at];
    lazyPropogationSegTree(id, at, l, r);
    return;
  }
  long long mid = (l + r) / 2;
  updateSegTree(id, 2 * at, l, mid, ul, ur);
  updateSegTree(id, 2 * at + 1, mid + 1, r, ul, ur);
  segTree[id][at] = segTree[id][2 * at] + segTree[id][2 * at + 1];
}
long long querySegTree(long long id, long long at, long long l, long long r,
                       long long ql, long long qr) {
  if (l > r) return 0;
  lazyPropogationSegTree(id, at, l, r);
  if (r < ql || l > qr) return 0;
  if (ql <= l && qr >= r) return segTree[id][at];
  long long mid = (l + r) / 2;
  return querySegTree(id, 2 * at, l, mid, ql, qr) +
         querySegTree(id, 2 * at + 1, mid + 1, r, ql, qr);
}
void input() {
  cin >> N;
  for (long long i = 1; i <= N; i++) cin >> ar[i];
  cin >> Q;
}
void solve() {
  for (long long i = 0; i < MAXSEG; i++) buildSegTree(i, 1, 1, N);
  long long kind, l, r, x;
  for (long long i = 1; i <= Q; i++) {
    cin >> kind;
    if (kind == 1) {
      cin >> l >> r;
      long long ans = 0;
      for (long long j = 0; j < MAXSEG; j++)
        ans += 1ll * (1 << j) * querySegTree(j, 1, 1, N, l, r);
      cout << ans << "\n";
    } else {
      cin >> l >> r >> x;
      for (long long j = 0; j < MAXSEG; j++)
        if ((1 << j) & x) updateSegTree(j, 1, 1, N, l, r);
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  input();
  solve();
  return 0;
}
