#include <bits/stdc++.h>
using namespace std;
long long t,n,m,u,v,k,c;
long long tree[500000];
long long lazytree[500000];
void Build(long long index, long long start, long long end);
long long Query(long long index, long long start, long long end, long long range_start, long long range_end);
void MarkChild(long long index, long long start, long long end);
long long update(long long index, long long start, long long end, long long range_start, long long range_end, long long value);
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> t;
while(t--){
cin >> n >> c;
Build(0, 0, n-1);
for(int i = 0; i < c; ++i){
cin >> k;
if(k==0){
cin >> u >> v >> m;
--u,--v;
update(0, 0, n-1LL, u, v, m);
}
else{
cin >> u >> v;
cout << Query(0, 0, n-1LL, u-1LL, v-1LL) << "\n";
}
}
}
return 0;
}
void Build(long long index, long long start, long long end){
lazytree[index] = 0;
tree[index] = 0;
if(start!=end){
Build(index*2 + 1, start, (start + end) >> 1);
Build(index*2 + 2, ((start + end) >> 1) + 1, end);
}
}
long long Query(long long index, long long start, long long end, long long range_start, long long range_end){
if(range_start > end || range_end < start)
return 0;
else if(range_start <= start && range_end >= end){
return tree[index] + (end - start + 1LL)*(lazytree[index]);
}
else{
MarkChild(index, start, end);
return Query(index*2 + 1, start, (start + end) >> 1, range_start, range_end) + Query(index*2 + 2, ((start + end) >> 1) + 1, end, range_start, range_end);
}
}
void MarkChild(long long index, long long start, long long end){
lazytree[index*2 + 1] += lazytree[index];
lazytree[index*2 + 2] += lazytree[index];
tree[index] += (end - start + 1LL)*lazytree[index];
lazytree[index] = 0;
}
long long update(long long index, long long start, long long end, long long range_start, long long range_end, long long value){
if(range_start > end || range_end < start)
return 0;
else if(range_start <= start && range_end >= end){
lazytree[index] += value;
return (end - start + 1LL)*value;
}
else{
long long vc = update(index*2 + 1, start, (start + end) >> 1, range_start, range_end, value) + update(index*2 + 2, ((start + end) >> 1) + 1, end, range_start, range_end, value);
tree[index] += vc;
return vc;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbG9uZyBsb25nIHQsbixtLHUsdixrLGM7CmxvbmcgbG9uZyB0cmVlWzUwMDAwMF07CmxvbmcgbG9uZyBsYXp5dHJlZVs1MDAwMDBdOwoKdm9pZCBCdWlsZChsb25nIGxvbmcgaW5kZXgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCk7CmxvbmcgbG9uZyBRdWVyeShsb25nIGxvbmcgaW5kZXgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCwgbG9uZyBsb25nIHJhbmdlX3N0YXJ0LCBsb25nIGxvbmcgcmFuZ2VfZW5kKTsKdm9pZCBNYXJrQ2hpbGQobG9uZyBsb25nIGluZGV4LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpOwpsb25nIGxvbmcgdXBkYXRlKGxvbmcgbG9uZyBpbmRleCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kLCBsb25nIGxvbmcgcmFuZ2Vfc3RhcnQsIGxvbmcgbG9uZyByYW5nZV9lbmQsIGxvbmcgbG9uZyB2YWx1ZSk7CgppbnQgbWFpbigpewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKDApOwoJY2luID4+IHQ7Cgl3aGlsZSh0LS0pewoJCWNpbiA+PiBuID4+IGM7CgkJQnVpbGQoMCwgMCwgbi0xKTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgYzsgKytpKXsKCQkJY2luID4+IGs7CgkJCWlmKGs9PTApewoJCQkJY2luID4+IHUgPj4gdiA+PiBtOwoJCQkJLS11LC0tdjsKCQkJCXVwZGF0ZSgwLCAwLCBuLTFMTCwgdSwgdiwgbSk7CgkJCX0KCQkJZWxzZXsKCQkJCWNpbiA+PiB1ID4+IHY7CgkJCQljb3V0IDw8IFF1ZXJ5KDAsIDAsIG4tMUxMLCB1LTFMTCwgdi0xTEwpIDw8ICJcbiI7CgkJCX0KCQl9Cgl9CglyZXR1cm4gMDsKfQp2b2lkIEJ1aWxkKGxvbmcgbG9uZyBpbmRleCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kKXsKCQlsYXp5dHJlZVtpbmRleF0gPSAwOwoJCXRyZWVbaW5kZXhdID0gMDsKCQlpZihzdGFydCE9ZW5kKXsKCQlCdWlsZChpbmRleCoyICsgMSwgc3RhcnQsIChzdGFydCArIGVuZCkgPj4gMSk7CgkJQnVpbGQoaW5kZXgqMiArIDIsICgoc3RhcnQgKyBlbmQpID4+IDEpICsgMSwgZW5kKTsKCQl9Cn0KbG9uZyBsb25nIFF1ZXJ5KGxvbmcgbG9uZyBpbmRleCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kLCBsb25nIGxvbmcgcmFuZ2Vfc3RhcnQsIGxvbmcgbG9uZyByYW5nZV9lbmQpewoJaWYocmFuZ2Vfc3RhcnQgPiBlbmQgfHwgcmFuZ2VfZW5kIDwgc3RhcnQpCgkJcmV0dXJuIDA7CgllbHNlIGlmKHJhbmdlX3N0YXJ0IDw9IHN0YXJ0ICYmIHJhbmdlX2VuZCA+PSBlbmQpewoJCSByZXR1cm4gdHJlZVtpbmRleF0gKyAoZW5kIC0gc3RhcnQgKyAxTEwpKihsYXp5dHJlZVtpbmRleF0pOwoJfQoJZWxzZXsKCQlNYXJrQ2hpbGQoaW5kZXgsIHN0YXJ0LCBlbmQpOwoJCXJldHVybiBRdWVyeShpbmRleCoyICsgMSwgc3RhcnQsIChzdGFydCArIGVuZCkgPj4gMSwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCkgKyBRdWVyeShpbmRleCoyICsgMiwgKChzdGFydCArIGVuZCkgPj4gMSkgKyAxLCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOwoJfQp9CnZvaWQgTWFya0NoaWxkKGxvbmcgbG9uZyBpbmRleCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kKXsKCWxhenl0cmVlW2luZGV4KjIgKyAxXSArPSBsYXp5dHJlZVtpbmRleF07CglsYXp5dHJlZVtpbmRleCoyICsgMl0gKz0gbGF6eXRyZWVbaW5kZXhdOwoJdHJlZVtpbmRleF0gKz0gKGVuZCAtIHN0YXJ0ICsgMUxMKSpsYXp5dHJlZVtpbmRleF07CglsYXp5dHJlZVtpbmRleF0gPSAwOwp9CmxvbmcgbG9uZyB1cGRhdGUobG9uZyBsb25nIGluZGV4LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGxvbmcgbG9uZyByYW5nZV9zdGFydCwgbG9uZyBsb25nIHJhbmdlX2VuZCwgbG9uZyBsb25nIHZhbHVlKXsKCWlmKHJhbmdlX3N0YXJ0ID4gZW5kIHx8IHJhbmdlX2VuZCA8IHN0YXJ0KQoJCXJldHVybiAwOwoJZWxzZSBpZihyYW5nZV9zdGFydCA8PSBzdGFydCAmJiByYW5nZV9lbmQgPj0gZW5kKXsKCQlsYXp5dHJlZVtpbmRleF0gKz0gdmFsdWU7CgkJcmV0dXJuIChlbmQgLSBzdGFydCArIDFMTCkqdmFsdWU7Cgl9CgllbHNlewoJCWxvbmcgbG9uZyB2YyA9IHVwZGF0ZShpbmRleCoyICsgMSwgc3RhcnQsIChzdGFydCArIGVuZCkgPj4gMSwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwgdmFsdWUpICsgdXBkYXRlKGluZGV4KjIgKyAyLCAoKHN0YXJ0ICsgZW5kKSA+PiAxKSArIDEsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwgdmFsdWUpOwoJCXRyZWVbaW5kZXhdICs9IHZjOwoJCXJldHVybiB2YzsKCX0KfSA=