#include <bits/stdc++.h>
#define gc getchar
#define pc putchar
using namespace std;
/*#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
*/
/*
two functions for policy based data structure. it is
find_by_order() and order_of_key().
The first returns an iterator to the k-th largest element (counting from zero),
the second returns the number of items in a set that are strictly smaller than our item
*/
#define vi vector<int>
#define si set<int>
#define vs vector<string>
#define pii pair<int,int>
#define vpi vector<pii>
#define pri priority_queue<int>
#define rev_pri priority_queue<int,vector<int>,greater<int> >
#define mpi map<int,int>
#define i64 long long int
#define endl '\n'
#define pi acos(-1)
#define all(v) v.begin(),v.end()
#define pb push_back
#define mp make_pair
#define mod 1000000007
#define For(i,n) for(int i=0;i<n;i++)
#define Rep(i,x,y) for(int i=x;i<=y;i++)
#define eps 1e-8
#define ff first
#define ss second
#define mem(a,b) memset(a,b,sizeof(a))
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define READ freopen("input.txt", "r", stdin)
#define WRITE freopen("output.txt","w", stdout)
#define sz size()
#define dbg(x) printf("yo is %d!\n",x)
#define dbg2(x,y) printf("yo is %d! and %d!\n",x,y)
#define foreach(i,c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define sqr(a) (a) * (a)
#define clr clear()
#define CASE(a) printf("Case %d:\n",a)
#define sf(n) scanf("%d", &n)
#define sff(a,b) scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
//int dx[] = {0,1,0,-1};
//int dy[] = {1,0,-1,0};
//int dx[] = { -1, -1, 0, 1, 1, 1, 0, -1 };
//int dy[] = { 0, -1, -1, -1, 0, 1, 1, 1 };
//int dxK[] = { -2, -2, -1, 1, 2, 2, 1, -1 };
//int dyK[] = { -1, 1, 2, 2, 1, -1, -2, -2 };
//functions
//i64 gcd(i64 a,i64 b){if(!b)return a;return gcd(b,a%b);}
//inline void fastRead(i64 *a){register char c=0;while(c<33)c=gc();*a=0;while(c>33){*a=*a*10+c-'0';c=gc();}}
//inline void fastWrite(int a){char snum[20];int i=0;do{snum[i++]=a%10+48;a=a/10;}while(a!=0);i=i-1;while(i>=0)pc(snum[i--]);pc('\n');}
//i64 bigmod(i64 num,i64 n){if(!n)return 1;i64 x=(bigmod(num,n/2)*bigmod(num,n/2))%mod;if(n%2)x=(x*num)%mod;return x;}
//i64 modinverse(i64 num){return bigmod(num,mod-2);}
//void combination(int pos,int last){if(pos==k+1){for(int i=1;i<=k;i++)cout << tem[i];cout << endl;return;}
//for(int i=last+1;i<=n-k+pos;i++){tem[pos] = num[i-1];combination(pos+1,i);}}
//i64 power(i64 value, i64 base){i64 result = 1;For(i,base)result *= value;return result;}
//int Set(int N,int pos){return N = (1<<pos);}
//int reset(int N,int pos){return N &= (~(1<<pos));}
//bool check(int N,int pos){return (bool)(N & (1<<pos));}
//typedef tree< int, null_type, less < int >, rb_tree_tag, tree_order_statistics_node_update > Set;
const int N = 1e5;
int n;
int seg[2*N];
int h;
int d[N];
void apply(int p, int value)
{
seg[p] += value;
if (p < n) d[p] += value;
}
void build(int p)
{
while (p > 1) p >>= 1, seg[p] = seg[p<<1] + seg[p<<1|1] + d[p];
}
void push(int p)
{
for (int s = h; s > 0; --s)
{
int i = p >> s;
if (d[i] != 0)
{
apply(i<<1, d[i]);
apply(i<<1|1, d[i]);
d[i] = 0;
}
}
}
void inc(int l, int r, int value)
{
l += n, r += n;
int l0 = l, r0 = r;
for (; l < r; l >>= 1, r >>= 1)
{
if (l&1) apply(l++, value);
if (r&1) apply(--r, value);
}
build(l0);
build(r0 - 1);
}
int query(int l, int r)
{
l += n, r += n;
push(l);
push(r - 1);
int res = 0;
for (; l < r; l >>= 1, r >>= 1)
{
if (l&1) res += seg[l++];
if (r&1) res += seg[--r];
}
return res;
}
int main()
{
int t;
sf(t);
Rep(tc,1,t)
{
mem(seg,0);
mem(d,0);
int q;
sff(n,q);
h = sizeof(int) * 8 - __builtin_clz(n);
int x,y,v;
CASE(tc);
while(q--)
{
int a;
sf(a);
if(a==0)
{
sfff(x,y,v);
inc(x,y+1,v);
}
else
{
sff(x,y);
printf("%d\n", query(x,y+1));
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgoKI2RlZmluZSBnYyBnZXRjaGFyCiNkZWZpbmUgcGMgcHV0Y2hhcgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3N0YW5kYXJkX3BvbGljaWVzLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgoKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiovCgovKgogICAgICAgIHR3byBmdW5jdGlvbnMgZm9yIHBvbGljeSBiYXNlZCBkYXRhIHN0cnVjdHVyZS4gaXQgaXMKCiAgICAgICAgICAgICAgICBmaW5kX2J5X29yZGVyKCkgYW5kIG9yZGVyX29mX2tleSgpLgoKICAgICAgICBUaGUgZmlyc3QgcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgay10aCBsYXJnZXN0IGVsZW1lbnQgKGNvdW50aW5nIGZyb20gemVybyksCiAgICAgICAgdGhlIHNlY29uZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQgdGhhdCBhcmUgc3RyaWN0bHkgc21hbGxlciB0aGFuIG91ciBpdGVtCgoqLwoKI2RlZmluZSB2aSB2ZWN0b3I8aW50PgojZGVmaW5lIHNpIHNldDxpbnQ+CiNkZWZpbmUgdnMgdmVjdG9yPHN0cmluZz4KI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHZwaSB2ZWN0b3I8cGlpPgojZGVmaW5lIHByaSBwcmlvcml0eV9xdWV1ZTxpbnQ+CiNkZWZpbmUgcmV2X3ByaSBwcmlvcml0eV9xdWV1ZTxpbnQsdmVjdG9yPGludD4sZ3JlYXRlcjxpbnQ+ID4KI2RlZmluZSBtcGkgbWFwPGludCxpbnQ+CiNkZWZpbmUgaTY0IGxvbmcgbG9uZyBpbnQKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBwaSBhY29zKC0xKQojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksdi5lbmQoKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CiNkZWZpbmUgRm9yKGksbikgZm9yKGludCBpPTA7aTxuO2krKykKI2RlZmluZSBSZXAoaSx4LHkpIGZvcihpbnQgaT14O2k8PXk7aSsrKQojZGVmaW5lIGVwcyAxZS04CiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBtZW0oYSxiKSBtZW1zZXQoYSxiLHNpemVvZihhKSkKI2RlZmluZSBtaW4zKGEsYixjKSBtaW4oYSxtaW4oYixjKSkKI2RlZmluZSBtYXgzKGEsYixjKSBtYXgoYSxtYXgoYixjKSkKI2RlZmluZSBSRUFEIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pCiNkZWZpbmUgV1JJVEUgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLCBzdGRvdXQpCiNkZWZpbmUgc3ogc2l6ZSgpCiNkZWZpbmUgZGJnKHgpIHByaW50ZigieW8gaXMgJWQhXG4iLHgpCiNkZWZpbmUgZGJnMih4LHkpIHByaW50ZigieW8gaXMgJWQhIGFuZCAlZCFcbiIseCx5KQojZGVmaW5lIGZvcmVhY2goaSxjKSBmb3IoX190eXBlb2YoKGMpLmJlZ2luKCkpIGkgPSAoYykuYmVnaW4oKTsgaSAhPSAoYykuZW5kKCk7IGkrKykKI2RlZmluZSBzcXIoYSkgKGEpICogKGEpCiNkZWZpbmUgY2xyIGNsZWFyKCkKI2RlZmluZSBDQVNFKGEpIHByaW50ZigiQ2FzZSAlZDpcbiIsYSkKI2RlZmluZSBzZihuKSBzY2FuZigiJWQiLCAmbikKI2RlZmluZSBzZmYoYSxiKSBzY2FuZigiJWQgJWQiLCAmYSwgJmIpCiNkZWZpbmUgc2ZmZihhLGIsYykgc2NhbmYoIiVkICVkICVkIiwgJmEsICZiLCAmYykKCi8vaW50IGR4W10gPSB7MCwxLDAsLTF9OwovL2ludCBkeVtdID0gezEsMCwtMSwwfTsKLy9pbnQgZHhbXSA9IHsgLTEsIC0xLCAgMCwgMSwgMSwgMSwgIDAsIC0xIH07Ci8vaW50IGR5W10gPSB7ICAwLCAtMSwgLTEsIC0xLCAgMCwgMSwgMSwgMSB9OwovL2ludCBkeEtbXSA9IHsgLTIsIC0yLCAtMSwgMSwgMiwgMiwgMSwgLTEgfTsKLy9pbnQgZHlLW10gPSB7IC0xLCAxLCAyLCAyLCAxLCAtMSwgLTIsIC0yIH07CgovL2Z1bmN0aW9ucwoKLy9pNjQgZ2NkKGk2NCBhLGk2NCBiKXtpZighYilyZXR1cm4gYTtyZXR1cm4gZ2NkKGIsYSViKTt9CgovL2lubGluZSB2b2lkIGZhc3RSZWFkKGk2NCAqYSl7cmVnaXN0ZXIgY2hhciBjPTA7d2hpbGUoYzwzMyljPWdjKCk7KmE9MDt3aGlsZShjPjMzKXsqYT0qYSoxMCtjLScwJztjPWdjKCk7fX0KCi8vaW5saW5lIHZvaWQgZmFzdFdyaXRlKGludCBhKXtjaGFyIHNudW1bMjBdO2ludCBpPTA7ZG97c251bVtpKytdPWElMTArNDg7YT1hLzEwO313aGlsZShhIT0wKTtpPWktMTt3aGlsZShpPj0wKXBjKHNudW1baS0tXSk7cGMoJ1xuJyk7fQoKLy9pNjQgYmlnbW9kKGk2NCBudW0saTY0IG4pe2lmKCFuKXJldHVybiAxO2k2NCB4PShiaWdtb2QobnVtLG4vMikqYmlnbW9kKG51bSxuLzIpKSVtb2Q7aWYobiUyKXg9KHgqbnVtKSVtb2Q7cmV0dXJuIHg7fQoKLy9pNjQgbW9kaW52ZXJzZShpNjQgbnVtKXtyZXR1cm4gYmlnbW9kKG51bSxtb2QtMik7fQoKLy92b2lkIGNvbWJpbmF0aW9uKGludCBwb3MsaW50IGxhc3Qpe2lmKHBvcz09aysxKXtmb3IoaW50IGk9MTtpPD1rO2krKyljb3V0IDw8IHRlbVtpXTtjb3V0IDw8IGVuZGw7cmV0dXJuO30KLy9mb3IoaW50IGk9bGFzdCsxO2k8PW4taytwb3M7aSsrKXt0ZW1bcG9zXSA9IG51bVtpLTFdO2NvbWJpbmF0aW9uKHBvcysxLGkpO319Ci8vaTY0IHBvd2VyKGk2NCB2YWx1ZSwgaTY0IGJhc2Upe2k2NCByZXN1bHQgPSAxO0ZvcihpLGJhc2UpcmVzdWx0ICo9IHZhbHVlO3JldHVybiByZXN1bHQ7fQovL2ludCBTZXQoaW50IE4saW50IHBvcyl7cmV0dXJuIE4gPSAoMTw8cG9zKTt9Ci8vaW50IHJlc2V0KGludCBOLGludCBwb3Mpe3JldHVybiBOICY9ICh+KDE8PHBvcykpO30KLy9ib29sIGNoZWNrKGludCBOLGludCBwb3Mpe3JldHVybiAoYm9vbCkoTiAmICgxPDxwb3MpKTt9CgovL3R5cGVkZWYgdHJlZTwgaW50LCBudWxsX3R5cGUsIGxlc3MgPCBpbnQgPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZSA+IFNldDsKCmNvbnN0IGludCBOID0gMWU1OwppbnQgbjsKaW50IHNlZ1syKk5dOwppbnQgaDsKaW50IGRbTl07Cgp2b2lkIGFwcGx5KGludCBwLCBpbnQgdmFsdWUpCnsKICAgIHNlZ1twXSArPSB2YWx1ZTsKICAgIGlmIChwIDwgbikgZFtwXSArPSB2YWx1ZTsKfQp2b2lkIGJ1aWxkKGludCBwKQp7CiAgICB3aGlsZSAocCA+IDEpIHAgPj49IDEsIHNlZ1twXSA9IHNlZ1twPDwxXSArIHNlZ1twPDwxfDFdICsgZFtwXTsKfQp2b2lkIHB1c2goaW50IHApCnsKICAgIGZvciAoaW50IHMgPSBoOyBzID4gMDsgLS1zKQogICAgewogICAgICAgIGludCBpID0gcCA+PiBzOwogICAgICAgIGlmIChkW2ldICE9IDApCiAgICAgICAgewogICAgICAgICAgICBhcHBseShpPDwxLCBkW2ldKTsKICAgICAgICAgICAgYXBwbHkoaTw8MXwxLCBkW2ldKTsKICAgICAgICAgICAgZFtpXSA9IDA7CiAgICAgICAgfQogIH0KfQp2b2lkIGluYyhpbnQgbCwgaW50IHIsIGludCB2YWx1ZSkKewogICAgbCArPSBuLCByICs9IG47CiAgICBpbnQgbDAgPSBsLCByMCA9IHI7CiAgICBmb3IgKDsgbCA8IHI7IGwgPj49IDEsIHIgPj49IDEpCiAgICB7CiAgICAgICAgaWYgKGwmMSkgYXBwbHkobCsrLCB2YWx1ZSk7CiAgICAgICAgaWYgKHImMSkgYXBwbHkoLS1yLCB2YWx1ZSk7CiAgICB9CiAgICBidWlsZChsMCk7CiAgICBidWlsZChyMCAtIDEpOwp9CgppbnQgcXVlcnkoaW50IGwsIGludCByKQp7CiAgICBsICs9IG4sIHIgKz0gbjsKICAgIHB1c2gobCk7CiAgICBwdXNoKHIgLSAxKTsKICAgIGludCByZXMgPSAwOwogICAgZm9yICg7IGwgPCByOyBsID4+PSAxLCByID4+PSAxKQogICAgewogICAgICAgIGlmIChsJjEpIHJlcyArPSBzZWdbbCsrXTsKICAgICAgICBpZiAociYxKSByZXMgKz0gc2VnWy0tcl07CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpCnsKICAgIGludCB0OwogICAgc2YodCk7CiAgICBSZXAodGMsMSx0KQogICAgewogICAgICAgIG1lbShzZWcsMCk7CiAgICAgICAgbWVtKGQsMCk7CiAgICAgICAgaW50IHE7CiAgICAgICAgc2ZmKG4scSk7CiAgICAgICAgaCA9IHNpemVvZihpbnQpICogOCAtIF9fYnVpbHRpbl9jbHoobik7CiAgICAgICAgaW50IHgseSx2OwogICAgICAgIENBU0UodGMpOwogICAgICAgIHdoaWxlKHEtLSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBhOwogICAgICAgICAgICBzZihhKTsKICAgICAgICAgICAgaWYoYT09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2ZmZih4LHksdik7CiAgICAgICAgICAgICAgICBpbmMoeCx5KzEsdik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzZmYoeCx5KTsKICAgICAgICAgICAgICAgIHByaW50ZigiJWRcbiIsIHF1ZXJ5KHgseSsxKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K