Built motion from commit f8768ebe.|2.6.15
[motion2.git] / server / api / smsApplication / smsApplication.controller.js
index 3797c2b..f00cf97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8125=['include','findAll','rows','params','rawAttributes','length','find','catch','create','update','body','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','status','undefined','limit','count','offset','set','Content-Range','json','apply','reject','save','then','destroy','end','error','stack','name','send','index','fieldName','type','key','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','sort','where','filters','pick','filter','map','VIRTUAL','merge','options','SmsApplication','includeAll'];(function(_0x3feb63,_0x45c598){var _0x5d4e7c=function(_0x3537ef){while(--_0x3537ef){_0x3feb63['push'](_0x3feb63['shift']());}};_0x5d4e7c(++_0x45c598);}(_0x8125,0x1eb));var _0x5812=function(_0x3922c3,_0xa5c65c){_0x3922c3=_0x3922c3-0x0;var _0x43fbc4=_0x8125[_0x3922c3];return _0x43fbc4;};'use strict';var emlformat=require(_0x5812('0x0'));var rimraf=require(_0x5812('0x1'));var zipdir=require(_0x5812('0x2'));var jsonpatch=require(_0x5812('0x3'));var rp=require('request-promise');var moment=require(_0x5812('0x4'));var BPromise=require(_0x5812('0x5'));var Mustache=require(_0x5812('0x6'));var util=require(_0x5812('0x7'));var path=require(_0x5812('0x8'));var sox=require(_0x5812('0x9'));var csv=require(_0x5812('0xa'));var ejs=require(_0x5812('0xb'));var fs=require('fs');var fs_extra=require(_0x5812('0xc'));var _=require('lodash');var squel=require(_0x5812('0xd'));var crypto=require(_0x5812('0xe'));var jsforce=require(_0x5812('0xf'));var deskjs=require(_0x5812('0x10'));var toCsv=require(_0x5812('0xa'));var querystring=require(_0x5812('0x11'));var Papa=require(_0x5812('0x12'));var Redis=require(_0x5812('0x13'));var authService=require(_0x5812('0x14'));var qs=require(_0x5812('0x15'));var as=require(_0x5812('0x16'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x5812('0x17'))(_0x5812('0x18'));var utils=require(_0x5812('0x19'));var config=require(_0x5812('0x1a'));var licenseUtil=require(_0x5812('0x1b'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4e8e22,_0x559f81){_0x559f81=_0x559f81||0xcc;return function(_0x423114){if(_0x423114){return _0x4e8e22['sendStatus'](_0x559f81);}return _0x4e8e22[_0x5812('0x1c')](_0x559f81)['end']();};}function respondWithResult(_0x44e087,_0x34c1cd){_0x34c1cd=_0x34c1cd||0xc8;return function(_0x1230fb){if(_0x1230fb){return _0x44e087[_0x5812('0x1c')](_0x34c1cd)['json'](_0x1230fb);}};}function respondWithFilteredResult(_0x59e574,_0x50463e){return function(_0x42e314){if(_0x42e314){var _0x295566=typeof _0x50463e['offset']===_0x5812('0x1d')&&typeof _0x50463e[_0x5812('0x1e')]===_0x5812('0x1d');var _0xf678bb=_0x42e314[_0x5812('0x1f')];var _0x6f8f89=_0x295566?0x0:_0x50463e[_0x5812('0x20')];var _0x5aee62=_0x295566?_0x42e314[_0x5812('0x1f')]:_0x50463e['offset']+_0x50463e[_0x5812('0x1e')];var _0x5d2510;if(_0x5aee62>=_0xf678bb){_0x5aee62=_0xf678bb;_0x5d2510=0xc8;}else{_0x5d2510=0xce;}_0x59e574[_0x5812('0x1c')](_0x5d2510);return _0x59e574[_0x5812('0x21')](_0x5812('0x22'),_0x6f8f89+'-'+_0x5aee62+'/'+_0xf678bb)[_0x5812('0x23')](_0x42e314);}return null;};}function patchUpdates(_0x35cea3){return function(_0x1d1aae){try{jsonpatch[_0x5812('0x24')](_0x1d1aae,_0x35cea3,!![]);}catch(_0x1d67d9){return BPromise[_0x5812('0x25')](_0x1d67d9);}return _0x1d1aae[_0x5812('0x26')]();};}function saveUpdates(_0x19db9f,_0x1788a9){return function(_0x1b4d80){if(_0x1b4d80){return _0x1b4d80['update'](_0x19db9f)[_0x5812('0x27')](function(_0x28dff1){return _0x28dff1;});}return null;};}function removeEntity(_0x2e3f79,_0x176df8){return function(_0x2079aa){if(_0x2079aa){return _0x2079aa[_0x5812('0x28')]()['then'](function(){_0x2e3f79[_0x5812('0x1c')](0xcc)[_0x5812('0x29')]();});}};}function handleEntityNotFound(_0x50ca66,_0xc9b7f9){return function(_0x38b22a){if(!_0x38b22a){_0x50ca66['sendStatus'](0x194);}return _0x38b22a;};}function handleError(_0xc2463f,_0x10905f){_0x10905f=_0x10905f||0x1f4;return function(_0xad8441){logger[_0x5812('0x2a')](_0xad8441[_0x5812('0x2b')]);if(_0xad8441[_0x5812('0x2c')]){delete _0xad8441[_0x5812('0x2c')];}_0xc2463f['status'](_0x10905f)[_0x5812('0x2d')](_0xad8441);};}exports[_0x5812('0x2e')]=function(_0x16f251,_0x4e2694){var _0x12de5c={},_0x3cccc6={},_0x116ab9={'count':0x0,'rows':[]};var _0x4e2822=_['map'](db['SmsApplication']['rawAttributes'],function(_0x2cbbbd){return{'name':_0x2cbbbd[_0x5812('0x2f')],'type':_0x2cbbbd[_0x5812('0x30')][_0x5812('0x31')]};});_0x3cccc6[_0x5812('0x32')]=_['map'](_0x4e2822,_0x5812('0x2c'));_0x3cccc6['query']=_[_0x5812('0x33')](_0x16f251[_0x5812('0x34')]);_0x3cccc6['filters']=_[_0x5812('0x35')](_0x3cccc6[_0x5812('0x32')],_0x3cccc6[_0x5812('0x34')]);_0x12de5c[_0x5812('0x36')]=_[_0x5812('0x35')](_0x3cccc6[_0x5812('0x32')],qs[_0x5812('0x37')](_0x16f251[_0x5812('0x34')][_0x5812('0x37')]));_0x12de5c['attributes']=_0x12de5c[_0x5812('0x36')]['length']?_0x12de5c[_0x5812('0x36')]:_0x3cccc6[_0x5812('0x32')];if(!_0x16f251[_0x5812('0x34')][_0x5812('0x38')](_0x5812('0x39'))){_0x12de5c[_0x5812('0x1e')]=qs[_0x5812('0x1e')](_0x16f251[_0x5812('0x34')]['limit']);_0x12de5c[_0x5812('0x20')]=qs['offset'](_0x16f251[_0x5812('0x34')]['offset']);}_0x12de5c['order']=qs[_0x5812('0x3a')](_0x16f251[_0x5812('0x34')][_0x5812('0x3a')]);_0x12de5c[_0x5812('0x3b')]=qs[_0x5812('0x3c')](_[_0x5812('0x3d')](_0x16f251['query'],_0x3cccc6[_0x5812('0x3c')]),_0x4e2822);if(_0x16f251[_0x5812('0x34')][_0x5812('0x3e')]){_0x12de5c[_0x5812('0x3b')]=_['merge'](_0x12de5c[_0x5812('0x3b')],{'$or':_[_0x5812('0x3f')](_0x4e2822,function(_0x55ac23){if(_0x55ac23[_0x5812('0x30')]!==_0x5812('0x40')){var _0x27e913={};_0x27e913[_0x55ac23['name']]={'$like':'%'+_0x16f251[_0x5812('0x34')][_0x5812('0x3e')]+'%'};return _0x27e913;}})});}_0x12de5c=_[_0x5812('0x41')]({},_0x12de5c,_0x16f251[_0x5812('0x42')]);var _0x1fbe63={'where':_0x12de5c[_0x5812('0x3b')]};return db[_0x5812('0x43')][_0x5812('0x1f')](_0x1fbe63)[_0x5812('0x27')](function(_0x23fbd6){_0x116ab9[_0x5812('0x1f')]=_0x23fbd6;if(_0x16f251[_0x5812('0x34')][_0x5812('0x44')]){_0x12de5c[_0x5812('0x45')]=[{'all':!![]}];}return db[_0x5812('0x43')][_0x5812('0x46')](_0x12de5c);})[_0x5812('0x27')](function(_0xbb3066){_0x116ab9[_0x5812('0x47')]=_0xbb3066;return _0x116ab9;})['then'](respondWithFilteredResult(_0x4e2694,_0x12de5c))['catch'](handleError(_0x4e2694,null));};exports['show']=function(_0x16df81,_0x55e2e4){var _0x455ad3={'raw':!![],'where':{'id':_0x16df81[_0x5812('0x48')]['id']}},_0x13e262={};_0x13e262['model']=_[_0x5812('0x33')](db[_0x5812('0x43')][_0x5812('0x49')]);_0x13e262[_0x5812('0x34')]=_['keys'](_0x16df81[_0x5812('0x34')]);_0x13e262[_0x5812('0x3c')]=_['intersection'](_0x13e262[_0x5812('0x32')],_0x13e262[_0x5812('0x34')]);_0x455ad3['attributes']=_[_0x5812('0x35')](_0x13e262[_0x5812('0x32')],qs[_0x5812('0x37')](_0x16df81['query'][_0x5812('0x37')]));_0x455ad3[_0x5812('0x36')]=_0x455ad3[_0x5812('0x36')][_0x5812('0x4a')]?_0x455ad3[_0x5812('0x36')]:_0x13e262[_0x5812('0x32')];if(_0x16df81[_0x5812('0x34')]['includeAll']){_0x455ad3[_0x5812('0x45')]=[{'all':!![]}];}_0x455ad3=_[_0x5812('0x41')]({},_0x455ad3,_0x16df81[_0x5812('0x42')]);return db['SmsApplication'][_0x5812('0x4b')](_0x455ad3)[_0x5812('0x27')](handleEntityNotFound(_0x55e2e4,null))['then'](respondWithResult(_0x55e2e4,null))[_0x5812('0x4c')](handleError(_0x55e2e4,null));};exports['create']=function(_0x49628f,_0x535b4b){return db['SmsApplication'][_0x5812('0x4d')](_0x49628f['body'],{})[_0x5812('0x27')](respondWithResult(_0x535b4b,0xc9))['catch'](handleError(_0x535b4b,null));};exports[_0x5812('0x4e')]=function(_0x1b3a88,_0xd487a9){if(_0x1b3a88[_0x5812('0x4f')]['id']){delete _0x1b3a88[_0x5812('0x4f')]['id'];}return db[_0x5812('0x43')]['find']({'where':{'id':_0x1b3a88['params']['id']}})[_0x5812('0x27')](handleEntityNotFound(_0xd487a9,null))[_0x5812('0x27')](saveUpdates(_0x1b3a88['body'],null))[_0x5812('0x27')](respondWithResult(_0xd487a9,null))[_0x5812('0x4c')](handleError(_0xd487a9,null));};exports[_0x5812('0x28')]=function(_0x8721c5,_0x55b22a){return db[_0x5812('0x43')][_0x5812('0x4b')]({'where':{'id':_0x8721c5[_0x5812('0x48')]['id']}})[_0x5812('0x27')](handleEntityNotFound(_0x55b22a,null))[_0x5812('0x27')](removeEntity(_0x55b22a,null))['catch'](handleError(_0x55b22a,null));};
\ No newline at end of file
+var _0x1c98=['type','key','model','query','filters','intersection','attributes','fields','length','nolimit','order','where','pick','filter','VIRTUAL','merge','SmsApplication','includeAll','findAll','rows','catch','show','params','keys','include','options','find','create','body','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','undefined','limit','offset','count','Content-Range','reject','save','update','then','destroy','sendStatus','name','index','map','rawAttributes'];(function(_0x51fd26,_0x3a5973){var _0x4c333f=function(_0x4b906c){while(--_0x4b906c){_0x51fd26['push'](_0x51fd26['shift']());}};_0x4c333f(++_0x3a5973);}(_0x1c98,0x1d3));var _0x81c9=function(_0x32169c,_0x8d2eee){_0x32169c=_0x32169c-0x0;var _0x2a4cc5=_0x1c98[_0x32169c];return _0x2a4cc5;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x81c9('0x0'));var zipdir=require(_0x81c9('0x1'));var jsonpatch=require(_0x81c9('0x2'));var rp=require(_0x81c9('0x3'));var moment=require(_0x81c9('0x4'));var BPromise=require(_0x81c9('0x5'));var Mustache=require(_0x81c9('0x6'));var util=require(_0x81c9('0x7'));var path=require(_0x81c9('0x8'));var sox=require(_0x81c9('0x9'));var csv=require(_0x81c9('0xa'));var ejs=require(_0x81c9('0xb'));var fs=require('fs');var fs_extra=require(_0x81c9('0xc'));var _=require(_0x81c9('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x81c9('0xe'));var deskjs=require(_0x81c9('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x81c9('0x10'));var Redis=require(_0x81c9('0x11'));var authService=require(_0x81c9('0x12'));var qs=require(_0x81c9('0x13'));var as=require(_0x81c9('0x14'));var hardwareService=require(_0x81c9('0x15'));var logger=require('../../config/logger')(_0x81c9('0x16'));var utils=require(_0x81c9('0x17'));var config=require(_0x81c9('0x18'));var licenseUtil=require('../../config/license/util');var db=require(_0x81c9('0x19'))['db'];function respondWithStatusCode(_0x238960,_0x46399d){_0x46399d=_0x46399d||0xcc;return function(_0x53d2da){if(_0x53d2da){return _0x238960['sendStatus'](_0x46399d);}return _0x238960[_0x81c9('0x1a')](_0x46399d)[_0x81c9('0x1b')]();};}function respondWithResult(_0x20ee53,_0x56635c){_0x56635c=_0x56635c||0xc8;return function(_0x54b1ee){if(_0x54b1ee){return _0x20ee53[_0x81c9('0x1a')](_0x56635c)[_0x81c9('0x1c')](_0x54b1ee);}};}function respondWithFilteredResult(_0x46e7c5,_0x550e42){return function(_0xae06ea){if(_0xae06ea){var _0x3b9ef9=typeof _0x550e42['offset']===_0x81c9('0x1d')&&typeof _0x550e42[_0x81c9('0x1e')]===_0x81c9('0x1d');var _0x48957e=_0xae06ea['count'];var _0x532bb4=_0x3b9ef9?0x0:_0x550e42[_0x81c9('0x1f')];var _0x585c0f=_0x3b9ef9?_0xae06ea[_0x81c9('0x20')]:_0x550e42[_0x81c9('0x1f')]+_0x550e42[_0x81c9('0x1e')];var _0x598c8d;if(_0x585c0f>=_0x48957e){_0x585c0f=_0x48957e;_0x598c8d=0xc8;}else{_0x598c8d=0xce;}_0x46e7c5['status'](_0x598c8d);return _0x46e7c5['set'](_0x81c9('0x21'),_0x532bb4+'-'+_0x585c0f+'/'+_0x48957e)[_0x81c9('0x1c')](_0xae06ea);}return null;};}function patchUpdates(_0x16d910){return function(_0x394f1b){try{jsonpatch['apply'](_0x394f1b,_0x16d910,!![]);}catch(_0x4ce902){return BPromise[_0x81c9('0x22')](_0x4ce902);}return _0x394f1b[_0x81c9('0x23')]();};}function saveUpdates(_0x47c7cd,_0x1eb68c){return function(_0x3ab7af){if(_0x3ab7af){return _0x3ab7af[_0x81c9('0x24')](_0x47c7cd)[_0x81c9('0x25')](function(_0x35fb62){return _0x35fb62;});}return null;};}function removeEntity(_0x5cc851,_0x2608ca){return function(_0x4f075a){if(_0x4f075a){return _0x4f075a[_0x81c9('0x26')]()[_0x81c9('0x25')](function(){_0x5cc851[_0x81c9('0x1a')](0xcc)[_0x81c9('0x1b')]();});}};}function handleEntityNotFound(_0x381880,_0x509605){return function(_0x56fde6){if(!_0x56fde6){_0x381880[_0x81c9('0x27')](0x194);}return _0x56fde6;};}function handleError(_0x3dbfab,_0x905524){_0x905524=_0x905524||0x1f4;return function(_0x5bb39f){logger['error'](_0x5bb39f['stack']);if(_0x5bb39f[_0x81c9('0x28')]){delete _0x5bb39f['name'];}_0x3dbfab[_0x81c9('0x1a')](_0x905524)['send'](_0x5bb39f);};}exports[_0x81c9('0x29')]=function(_0x88f452,_0x587512){var _0x5297d6={},_0x259a3b={},_0x1ed858={'count':0x0,'rows':[]};var _0x35bceb=_[_0x81c9('0x2a')](db['SmsApplication'][_0x81c9('0x2b')],function(_0x25ba3a){return{'name':_0x25ba3a['fieldName'],'type':_0x25ba3a[_0x81c9('0x2c')][_0x81c9('0x2d')]};});_0x259a3b[_0x81c9('0x2e')]=_[_0x81c9('0x2a')](_0x35bceb,_0x81c9('0x28'));_0x259a3b[_0x81c9('0x2f')]=_['keys'](_0x88f452[_0x81c9('0x2f')]);_0x259a3b[_0x81c9('0x30')]=_[_0x81c9('0x31')](_0x259a3b['model'],_0x259a3b[_0x81c9('0x2f')]);_0x5297d6[_0x81c9('0x32')]=_[_0x81c9('0x31')](_0x259a3b[_0x81c9('0x2e')],qs[_0x81c9('0x33')](_0x88f452[_0x81c9('0x2f')]['fields']));_0x5297d6[_0x81c9('0x32')]=_0x5297d6['attributes'][_0x81c9('0x34')]?_0x5297d6[_0x81c9('0x32')]:_0x259a3b[_0x81c9('0x2e')];if(!_0x88f452[_0x81c9('0x2f')]['hasOwnProperty'](_0x81c9('0x35'))){_0x5297d6[_0x81c9('0x1e')]=qs['limit'](_0x88f452[_0x81c9('0x2f')]['limit']);_0x5297d6['offset']=qs[_0x81c9('0x1f')](_0x88f452[_0x81c9('0x2f')][_0x81c9('0x1f')]);}_0x5297d6[_0x81c9('0x36')]=qs['sort'](_0x88f452[_0x81c9('0x2f')]['sort']);_0x5297d6[_0x81c9('0x37')]=qs[_0x81c9('0x30')](_[_0x81c9('0x38')](_0x88f452[_0x81c9('0x2f')],_0x259a3b[_0x81c9('0x30')]),_0x35bceb);if(_0x88f452[_0x81c9('0x2f')][_0x81c9('0x39')]){_0x5297d6[_0x81c9('0x37')]=_['merge'](_0x5297d6['where'],{'$or':_[_0x81c9('0x2a')](_0x35bceb,function(_0x2614b0){if(_0x2614b0[_0x81c9('0x2c')]!==_0x81c9('0x3a')){var _0xa2b2f6={};_0xa2b2f6[_0x2614b0[_0x81c9('0x28')]]={'$like':'%'+_0x88f452[_0x81c9('0x2f')]['filter']+'%'};return _0xa2b2f6;}})});}_0x5297d6=_[_0x81c9('0x3b')]({},_0x5297d6,_0x88f452['options']);var _0x3d4243={'where':_0x5297d6[_0x81c9('0x37')]};return db[_0x81c9('0x3c')][_0x81c9('0x20')](_0x3d4243)[_0x81c9('0x25')](function(_0x410e19){_0x1ed858[_0x81c9('0x20')]=_0x410e19;if(_0x88f452[_0x81c9('0x2f')][_0x81c9('0x3d')]){_0x5297d6['include']=[{'all':!![]}];}return db[_0x81c9('0x3c')][_0x81c9('0x3e')](_0x5297d6);})[_0x81c9('0x25')](function(_0x24df10){_0x1ed858[_0x81c9('0x3f')]=_0x24df10;return _0x1ed858;})[_0x81c9('0x25')](respondWithFilteredResult(_0x587512,_0x5297d6))[_0x81c9('0x40')](handleError(_0x587512,null));};exports[_0x81c9('0x41')]=function(_0x5894e1,_0x58b83c){var _0x2ad5f7={'raw':!![],'where':{'id':_0x5894e1[_0x81c9('0x42')]['id']}},_0x54eb80={};_0x54eb80[_0x81c9('0x2e')]=_[_0x81c9('0x43')](db[_0x81c9('0x3c')]['rawAttributes']);_0x54eb80[_0x81c9('0x2f')]=_[_0x81c9('0x43')](_0x5894e1['query']);_0x54eb80[_0x81c9('0x30')]=_[_0x81c9('0x31')](_0x54eb80[_0x81c9('0x2e')],_0x54eb80[_0x81c9('0x2f')]);_0x2ad5f7[_0x81c9('0x32')]=_[_0x81c9('0x31')](_0x54eb80['model'],qs['fields'](_0x5894e1[_0x81c9('0x2f')][_0x81c9('0x33')]));_0x2ad5f7[_0x81c9('0x32')]=_0x2ad5f7['attributes']['length']?_0x2ad5f7[_0x81c9('0x32')]:_0x54eb80[_0x81c9('0x2e')];if(_0x5894e1[_0x81c9('0x2f')]['includeAll']){_0x2ad5f7[_0x81c9('0x44')]=[{'all':!![]}];}_0x2ad5f7=_[_0x81c9('0x3b')]({},_0x2ad5f7,_0x5894e1[_0x81c9('0x45')]);return db['SmsApplication'][_0x81c9('0x46')](_0x2ad5f7)['then'](handleEntityNotFound(_0x58b83c,null))[_0x81c9('0x25')](respondWithResult(_0x58b83c,null))[_0x81c9('0x40')](handleError(_0x58b83c,null));};exports[_0x81c9('0x47')]=function(_0x553893,_0x4dfc81){return db[_0x81c9('0x3c')]['create'](_0x553893[_0x81c9('0x48')],{})[_0x81c9('0x25')](respondWithResult(_0x4dfc81,0xc9))['catch'](handleError(_0x4dfc81,null));};exports['update']=function(_0x111d32,_0x58ce84){if(_0x111d32[_0x81c9('0x48')]['id']){delete _0x111d32[_0x81c9('0x48')]['id'];}return db['SmsApplication']['find']({'where':{'id':_0x111d32[_0x81c9('0x42')]['id']}})[_0x81c9('0x25')](handleEntityNotFound(_0x58ce84,null))[_0x81c9('0x25')](saveUpdates(_0x111d32[_0x81c9('0x48')],null))[_0x81c9('0x25')](respondWithResult(_0x58ce84,null))[_0x81c9('0x40')](handleError(_0x58ce84,null));};exports[_0x81c9('0x26')]=function(_0x7fb1b,_0xfb307c){return db[_0x81c9('0x3c')][_0x81c9('0x46')]({'where':{'id':_0x7fb1b[_0x81c9('0x42')]['id']}})[_0x81c9('0x25')](handleEntityNotFound(_0xfb307c,null))[_0x81c9('0x25')](removeEntity(_0xfb307c,null))[_0x81c9('0x40')](handleError(_0xfb307c,null));};
\ No newline at end of file