#include <bits/stdc++.h>
const double eps = 1e-10;
using namespace std;
using ll = long long;
using PII = pair<int, int>;
const long NN = (1 << 18);
int answww[NN];
int n, m, q, a, b, c;
ll x;
int zzz;
int in[NN];
int tt[NN];
struct sg {
  sg *l, *r;
  int sum;
  bool pushed;
  sg() {}
  sg(int x) : sum(x), pushed(0), l(0), r(0) {}
  void up() { sum = l->sum + r->sum; }
  sg(sg *_l, sg *_r) {
    this->pushed = 0;
    l = _l, r = _r;
    up();
  }
  void pushit(int tl, int tr, int md) {
    if (this->pushed) {
      this->pushed = 0;
      l->pushed ^= 1;
      r->pushed ^= 1;
      l->sum = (md - tl + 1) - l->sum;
      r->sum = (tr - md) - r->sum;
    }
  }
  void change(int tl, int tr) {
    this->pushed ^= 1;
    this->sum = (tr - tl + 1) - this->sum;
  }
};
sg *T[20];
sg *build(int tl, int tr) {
  if (tl == tr) {
    return new sg(tt[tl]);
  }
  return new sg(build(tl, ((tl + tr) >> 1)), build(((tl + tr) >> 1) + 1, tr));
}
void xorOn(sg *on, int tl, int tr, int l, int r) {
  if (tl > r || tr < l) {
    return;
  }
  if (tl >= l && tr <= r) {
    on->change(tl, tr);
    return;
  }
  on->pushit(tl, tr, ((tl + tr) >> 1));
  xorOn(on->l, tl, ((tl + tr) >> 1), l, r);
  xorOn(on->r, ((tl + tr) >> 1) + 1, tr, l, r);
  on->up();
}
int sum(sg *on, int tl, int tr, int l, int r) {
  if (tl > r || tr < l) return 0;
  if (tl >= l && tr <= r) return on->sum;
  on->pushit(tl, tr, ((tl + tr) >> 1));
  return sum(on->l, tl, ((tl + tr) >> 1), l, r) +
         sum(on->r, ((tl + tr) >> 1) + 1, tr, l, r);
}
void xorit(int l, int r, int x) {
  for (int i = 0; i < 20; i++) {
    if (x & (1 << i)) xorOn(T[i], 0, n - 1, l, r);
  }
}
long long last(int l, int r) {
  long long pas = 0;
  for (int i = 0; i < 20; i++) {
    pas += (1LL << i) * sum(T[i], 0, n - 1, l, r);
  }
  return pas;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &in[i]);
  }
  for (int i = 0; i < 20; i++) {
    memset(tt, 0, sizeof(tt));
    for (int j = 0; j < n; j++) {
      if (in[j] & (1 << i)) {
        tt[j] = 1;
      }
    }
    T[i] = build(0, n - 1);
  }
  scanf("%d", &m);
  while (m--) {
    int tipo, l, r, x;
    scanf("%d %d %d", &tipo, &l, &r);
    if (tipo == 1) {
      printf("%I64d\n", last(l - 1, r - 1));
    } else {
      scanf("%d", &x);
      xorit(l - 1, r - 1, x);
    }
  }
  return 0;
}
