#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll int arr[100005];
ll int tree[400005] = {0};
ll int lazy[400005] = {0};
ll int sum(ll int a,ll int b)
{
return (a + b);
}
void build_tree(int node,int a,int b)
{
if(a > b)
return ;
if(a == b)
{
tree[node] = arr[a];
return ;
}
build_tree(2*node,a,(a+b)/2);
build_tree(2*node + 1,1 + (a+b)/2,b);
tree[node] = sum(tree[2*node],tree[(2*node) + 1]);
}
void update_tree(int node,int a,int b,int i,int j,int val)
{
if(lazy[node] != 0)
{
tree[node] += (b - a + 1) * lazy[node];
if(a != b)
{
lazy[2*node] += lazy[node];
lazy[(2*node) + 1] += lazy[node];
}
lazy[node] = 0;
}
// because of past
if(a > b || a > j || b < i)
return;
if(a >= i && b <= j)
{
tree[node] += (b - a + 1) * val;
if(a != b)
{
lazy[node*2] += val;
lazy[(2*node) + 1] += val;
}
return ;
}
update_tree(2*node,a,(a+b)/2,i,j,val);
update_tree((2*node) + 1,1 + ((a+b)/2),b,i,j,val);
tree[node] = sum(tree[2*node],tree[(2*node) + 1]);
}
ll int query_tree(int node,int a,int b,int i,int j)
{
if(lazy[node] != 0)
{
tree[node] += (b - a + 1) * lazy[node];
if(a != b)
{
lazy[2*node] += lazy[node];
lazy[(2*node) + 1] += lazy[node];
}
lazy[node] = 0;
}
if(a > b || a > j || b < i)
return 0;
// because of past
if(a >= i && b <= j)
{
return tree[node];
}
ll int q1 = query_tree(2*node,a,(a + b)/2,i,j);
ll int q2 = query_tree((2*node) + 1,1 + ((a + b)/2),b,i,j);
return sum(q1,q2);
}
int main()
{
ios_base::sync_with_stdio(0);
int N,type,l,r,val,Q,T;
cin >> T;
while(T--)
{
cin >> N >> Q;
for(int i = 0;i <= 4*N;i++)
{
tree[i] = lazy[i] = 0;
}
// build_tree(1,0,N - 1);
while(Q--)
{
cin >> type;
if(type == 0) // update
{
cin >> l >> r >> val;
update_tree(1,0,N - 1,l - 1,r - 1,val);
}
else
{
cin >> l >> r;
cout << query_tree(1,0,N - 1,l - 1,r - 1) << endl;
}
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKbGwgaW50IGFyclsxMDAwMDVdOwpsbCBpbnQgdHJlZVs0MDAwMDVdID0gezB9OwpsbCBpbnQgbGF6eVs0MDAwMDVdID0gezB9OwoKbGwgaW50IHN1bShsbCBpbnQgYSxsbCBpbnQgYikKewoJcmV0dXJuIChhICsgYik7Cn0KCnZvaWQgYnVpbGRfdHJlZShpbnQgbm9kZSxpbnQgYSxpbnQgYikKewoJaWYoYSA+IGIpCgkJcmV0dXJuIDsKCWlmKGEgPT0gYikKCXsKCQl0cmVlW25vZGVdID0gYXJyW2FdOwoJCXJldHVybiA7Cgl9CgoJYnVpbGRfdHJlZSgyKm5vZGUsYSwoYStiKS8yKTsKCWJ1aWxkX3RyZWUoMipub2RlICsgMSwxICsgKGErYikvMixiKTsKCXRyZWVbbm9kZV0gPSBzdW0odHJlZVsyKm5vZGVdLHRyZWVbKDIqbm9kZSkgKyAxXSk7Cn0KCnZvaWQgdXBkYXRlX3RyZWUoaW50IG5vZGUsaW50IGEsaW50IGIsaW50IGksaW50IGosaW50IHZhbCkKewoJaWYobGF6eVtub2RlXSAhPSAwKQoJewoJCXRyZWVbbm9kZV0gKz0gKGIgLSBhICsgMSkgKiBsYXp5W25vZGVdOwoJCWlmKGEgIT0gYikKCQl7CgkJCWxhenlbMipub2RlXSArPSBsYXp5W25vZGVdOwoJCQlsYXp5WygyKm5vZGUpICsgMV0gKz0gbGF6eVtub2RlXTsKCQl9CgkJbGF6eVtub2RlXSA9IDA7Cgl9CgkvLyBiZWNhdXNlIG9mIHBhc3QKCglpZihhID4gYiAgICAgIHx8ICAgYSA+IGogICB8fCBiIDwgaSkKCQlyZXR1cm47CglpZihhID49IGkgJiYgYiA8PSBqKQoJewoJCXRyZWVbbm9kZV0gKz0gKGIgLSBhICsgMSkgKiB2YWw7CgkJaWYoYSAhPSBiKQoJCXsKCQkJbGF6eVtub2RlKjJdICs9IHZhbDsKCQkJbGF6eVsoMipub2RlKSArIDFdICs9IHZhbDsKCQl9CgkJcmV0dXJuIDsKCX0KCgl1cGRhdGVfdHJlZSgyKm5vZGUsYSwoYStiKS8yLGksaix2YWwpOwoJdXBkYXRlX3RyZWUoKDIqbm9kZSkgKyAxLDEgKyAoKGErYikvMiksYixpLGosdmFsKTsKCXRyZWVbbm9kZV0gPSBzdW0odHJlZVsyKm5vZGVdLHRyZWVbKDIqbm9kZSkgKyAxXSk7Cgp9CgpsbCBpbnQgcXVlcnlfdHJlZShpbnQgbm9kZSxpbnQgYSxpbnQgYixpbnQgaSxpbnQgaikKewoJCWlmKGxhenlbbm9kZV0gIT0gMCkKCQl7CgkJCXRyZWVbbm9kZV0gKz0gKGIgLSBhICsgMSkgKiBsYXp5W25vZGVdOwoJCQlpZihhICE9IGIpCgkJCXsKCQkJCWxhenlbMipub2RlXSArPSBsYXp5W25vZGVdOwoJCQkJbGF6eVsoMipub2RlKSArIDFdICs9IGxhenlbbm9kZV07CgkJCX0KCQkJbGF6eVtub2RlXSA9IDA7CgkJfQoKCQlpZihhID4gYiAgICAgIHx8ICAgYSA+IGogICB8fCBiIDwgaSkKCQkJcmV0dXJuIDA7CgoKCS8vIGJlY2F1c2Ugb2YgcGFzdAoKCWlmKGEgPj0gaSAmJiBiIDw9IGopCgl7CgkJcmV0dXJuIHRyZWVbbm9kZV07Cgl9CgkKCWxsIGludCBxMSA9IHF1ZXJ5X3RyZWUoMipub2RlLGEsKGEgKyBiKS8yLGksaik7CglsbCBpbnQgcTIgPSBxdWVyeV90cmVlKCgyKm5vZGUpICsgMSwxICsgKChhICsgYikvMiksYixpLGopOwoJcmV0dXJuIHN1bShxMSxxMik7Cn0KCmludCBtYWluKCkKewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWludCBOLHR5cGUsbCxyLHZhbCxRLFQ7CgljaW4gPj4gVDsKCgl3aGlsZShULS0pCgl7CgkJY2luID4+IE4gPj4gUTsKCQlmb3IoaW50IGkgPSAwO2kgPD0gNCpOO2krKykKCQl7CgkJCXRyZWVbaV0gPSBsYXp5W2ldID0gMDsKCQl9CgkvLwlidWlsZF90cmVlKDEsMCxOIC0gMSk7CgkJCgkJd2hpbGUoUS0tKQoJCXsKCQkJY2luID4+IHR5cGU7CgkJCWlmKHR5cGUgPT0gMCkJCQkvLyAgdXBkYXRlCgkJCXsKCQkJCWNpbiA+PiBsID4+IHIgPj4gdmFsOwoJCQkJdXBkYXRlX3RyZWUoMSwwLE4gLSAxLGwgLSAxLHIgLSAxLHZhbCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQljaW4gPj4gbCA+PiByOwoJCQkJY291dCA8PCBxdWVyeV90cmVlKDEsMCxOIC0gMSxsIC0gMSxyIC0gMSkgPDwgZW5kbDsKCQkJfQoJCX0KCgl9CglyZXR1cm4gMDsKCn0=