#include<bits/stdc++.h>
using namespace std;
inline long long read(){
long long x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x*f;
}
inline void write(long long x){
if(x==0){putchar('0');return;}
long long len=0,k1=x,c[10005];
if(k1<0)k1=-k1,putchar('-');
while(k1)c[len++]=k1%10+'0',k1/=10;
while(len--)putchar(c[len]);
}
long long a[100005];
struct Node{
long long l,r,s=0,lazy=0;
}t[22][100005];
void build_suan(long long i,long long p,long long x){
long long cnt=0;
while(x){
cnt++;
if(cnt==i){
t[i][p].s=x%2;
return;
}
x>>=1;
}
}
void build(long long p,long long l,long long r,long long i){
t[i][p].l=l,t[i][p].r=r;
if(l==r){
build_suan(i,p,a[l]);
return;
}
long long mid=(l+r)>>1;
build(p*2,l,mid,i);
build(p*2+1,mid+1,r,i);
t[i][p].s=t[i][p*2].s+t[i][p*2+1].s;
}
void change(long long p,long long x,long long y,long long i){
long long l=t[i][p].l,r=t[i][p].r;
if(l>=x&&r<=y){
t[i][p].s=(r-l+1)-t[i][p].s;
t[i][p].lazy=1;
return;
}
if(t[i][p].lazy){
t[i][p*2].lazy=1,t[i][p*2+1].lazy=1;
t[i][p*2].s=(t[i][p*2].r-t[i][p*2].l+1)-t[i][p*2].s;
t[i][p*2+1].s=(t[i][p*2+1].r-t[i][p*2+1].l+1)-t[i][p*2+1].s;
t[i][p].lazy=0;
}
long long mid=(l+r)>>1;
if(mid>=x){
change(p*2,x,y,i);
}
if(mid<y){
change(p*2+1,x,y,i);
}
t[i][p].s=t[i][p*2].s+t[i][p*2+1].s;
}
long long ask(long long p,long long x,long long y,long long i){
long long l=t[i][p].l,r=t[i][p].r;
if(l>=x&&r<=y){
return t[i][p].s;
}
if(t[i][p].lazy){
t[i][p*2].lazy=1,t[i][p*2+1].lazy=1;
t[i][p*2].s=(t[i][p*2].r-t[i][p*2].l+1)-t[i][p*2].s;
t[i][p*2+1].s=(t[i][p*2+1].r-t[i][p*2+1].l+1)-t[i][p*2+1].s;
t[i][p].lazy=0;
}
long long mid=(l+r)>>1,ans=0;
if(mid>=x){
ans+=ask(p*2,x,y,i);
}
if(mid<y){
ans+=ask(p*2+1,x,y,i);
}
return ans;
}
long long bin[25];
int main(){
long long n=read();
for(long long i=1;i<=n;i++){
a[i]=read();
}
bin[0]=1;
for(long long i=1;i<=22;i++){
bin[i]=bin[i-1]*2;
}
for(long long i=1;i<=21;i++){
build(1,1,n,i);
}
long long m=read();
while(m--){
long long op=read();
if(op==1){
long long l,r;
cin>>l>>r;
long long res=0;
for(long long i=1;i<=21;i++){
res+=ask(1,l,r,i)*bin[i-1];
}
write(res);
puts("");
}
else{
long long l=read(),r=read(),x=read();
long long cnt=0;
while(x){
cnt++;
if(x%2==1){
change(1,l,r,cnt);
}
x>>=1;
}
}
}
return 0;
}