Built motion from commit (unavailable).|2.5.10
[motion2.git] / server / api / mailSubstatus / mailSubstatus.controller.js
index c9bbff7..0dac72c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe49a=['describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','querystring','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/environment','../../config/license/util','../../mysqldb','status','end','count','offset','limit','set','Content-Range','json','apply','save','update','then','destroy','sendStatus','error','stack','name','send','index','MailSubstatus','rawAttributes','fieldName','type','key','model','map','query','keys','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','VIRTUAL','filter','options','includeAll','include','findAll','rows','catch','params','find','create','body'];(function(_0x1c730a,_0x495724){var _0x6be696=function(_0x1a6967){while(--_0x1a6967){_0x1c730a['push'](_0x1c730a['shift']());}};_0x6be696(++_0x495724);}(_0xe49a,0x17d));var _0xae49=function(_0x3d7d2b,_0x3cda52){_0x3d7d2b=_0x3d7d2b-0x0;var _0x96336=_0xe49a[_0x3d7d2b];return _0x96336;};'use strict';var pdf=require(_0xae49('0x0'));var emlformat=require(_0xae49('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xae49('0x2'));var jsonpatch=require(_0xae49('0x3'));var rp=require(_0xae49('0x4'));var moment=require(_0xae49('0x5'));var BPromise=require(_0xae49('0x6'));var Mustache=require('mustache');var util=require(_0xae49('0x7'));var path=require(_0xae49('0x8'));var sox=require(_0xae49('0x9'));var csv=require(_0xae49('0xa'));var ejs=require(_0xae49('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xae49('0xc'));var crypto=require(_0xae49('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xae49('0xa'));var querystring=require(_0xae49('0xe'));var Papa=require('papaparse');var Redis=require(_0xae49('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xae49('0x10'));var as=require(_0xae49('0x11'));var hardwareService=require(_0xae49('0x12'));var logger=require(_0xae49('0x13'))('api');var utils=require('../../config/utils');var config=require(_0xae49('0x14'));var licenseUtil=require(_0xae49('0x15'));var db=require(_0xae49('0x16'))['db'];function respondWithStatusCode(_0x3ef1fe,_0x5314b6){_0x5314b6=_0x5314b6||0xcc;return function(_0x128219){if(_0x128219){return _0x3ef1fe['sendStatus'](_0x5314b6);}return _0x3ef1fe[_0xae49('0x17')](_0x5314b6)[_0xae49('0x18')]();};}function respondWithResult(_0x571218,_0x1d49dc){_0x1d49dc=_0x1d49dc||0xc8;return function(_0x355b7f){if(_0x355b7f){return _0x571218[_0xae49('0x17')](_0x1d49dc)['json'](_0x355b7f);}};}function respondWithFilteredResult(_0x1b306d,_0x58c5b9){return function(_0x32ee7b){if(_0x32ee7b){var _0x1c90ff=_0x32ee7b[_0xae49('0x19')],_0x3f8986=_0x58c5b9[_0xae49('0x1a')],_0x2bb122=_0x58c5b9[_0xae49('0x1a')]+_0x58c5b9[_0xae49('0x1b')],_0x4c3aea;if(_0x2bb122>=_0x1c90ff){_0x2bb122=_0x1c90ff;_0x4c3aea=0xc8;}else{_0x4c3aea=0xce;}_0x1b306d['status'](_0x4c3aea);return _0x1b306d[_0xae49('0x1c')](_0xae49('0x1d'),_0x3f8986+'-'+_0x2bb122+'/'+_0x1c90ff)[_0xae49('0x1e')](_0x32ee7b);}return null;};}function patchUpdates(_0x56ce3e){return function(_0xda7a2e){try{jsonpatch[_0xae49('0x1f')](_0xda7a2e,_0x56ce3e,!![]);}catch(_0xca7cff){return BPromise['reject'](_0xca7cff);}return _0xda7a2e[_0xae49('0x20')]();};}function saveUpdates(_0xd183f9,_0x435693){return function(_0x55ac46){if(_0x55ac46){return _0x55ac46[_0xae49('0x21')](_0xd183f9)[_0xae49('0x22')](function(_0x42996f){return _0x42996f;});}return null;};}function removeEntity(_0x4e4906,_0x3a1ecd){return function(_0x29a2e3){if(_0x29a2e3){return _0x29a2e3[_0xae49('0x23')]()[_0xae49('0x22')](function(){_0x4e4906[_0xae49('0x17')](0xcc)[_0xae49('0x18')]();});}};}function handleEntityNotFound(_0x201433,_0x35bf51){return function(_0x5306b8){if(!_0x5306b8){_0x201433[_0xae49('0x24')](0x194);}return _0x5306b8;};}function handleError(_0x528907,_0x54dd66){_0x54dd66=_0x54dd66||0x1f4;return function(_0x27cbe5){logger[_0xae49('0x25')](_0x27cbe5[_0xae49('0x26')]);if(_0x27cbe5[_0xae49('0x27')]){delete _0x27cbe5[_0xae49('0x27')];}_0x528907[_0xae49('0x17')](_0x54dd66)[_0xae49('0x28')](_0x27cbe5);};}exports[_0xae49('0x29')]=function(_0x54051a,_0x5e2f12){var _0x2f63cf={},_0x33b392={},_0x16c99f={'count':0x0,'rows':[]};var _0x44ef0f=_['map'](db[_0xae49('0x2a')][_0xae49('0x2b')],function(_0x4db5c4){return{'name':_0x4db5c4[_0xae49('0x2c')],'type':_0x4db5c4[_0xae49('0x2d')][_0xae49('0x2e')]};});_0x33b392[_0xae49('0x2f')]=_[_0xae49('0x30')](_0x44ef0f,_0xae49('0x27'));_0x33b392[_0xae49('0x31')]=_[_0xae49('0x32')](_0x54051a[_0xae49('0x31')]);_0x33b392['filters']=_[_0xae49('0x33')](_0x33b392['model'],_0x33b392[_0xae49('0x31')]);_0x2f63cf['attributes']=_[_0xae49('0x33')](_0x33b392[_0xae49('0x2f')],qs[_0xae49('0x34')](_0x54051a[_0xae49('0x31')][_0xae49('0x34')]));_0x2f63cf[_0xae49('0x35')]=_0x2f63cf[_0xae49('0x35')][_0xae49('0x36')]?_0x2f63cf[_0xae49('0x35')]:_0x33b392[_0xae49('0x2f')];if(!_0x54051a[_0xae49('0x31')][_0xae49('0x37')](_0xae49('0x38'))){_0x2f63cf['limit']=qs['limit'](_0x54051a[_0xae49('0x31')][_0xae49('0x1b')]);_0x2f63cf[_0xae49('0x1a')]=qs[_0xae49('0x1a')](_0x54051a['query'][_0xae49('0x1a')]);}_0x2f63cf[_0xae49('0x39')]=qs['sort'](_0x54051a['query'][_0xae49('0x3a')]);_0x2f63cf[_0xae49('0x3b')]=qs[_0xae49('0x3c')](_[_0xae49('0x3d')](_0x54051a[_0xae49('0x31')],_0x33b392[_0xae49('0x3c')]),_0x44ef0f);if(_0x54051a[_0xae49('0x31')]['filter']){_0x2f63cf[_0xae49('0x3b')]=_[_0xae49('0x3e')](_0x2f63cf[_0xae49('0x3b')],{'$or':_[_0xae49('0x30')](_0x44ef0f,function(_0x422d73){if(_0x422d73[_0xae49('0x2d')]!==_0xae49('0x3f')){var _0x55ae6f={};_0x55ae6f[_0x422d73[_0xae49('0x27')]]={'$like':'%'+_0x54051a['query'][_0xae49('0x40')]+'%'};return _0x55ae6f;}})});}_0x2f63cf=_[_0xae49('0x3e')]({},_0x2f63cf,_0x54051a[_0xae49('0x41')]);var _0x20ce33={'where':_0x2f63cf[_0xae49('0x3b')]};return db[_0xae49('0x2a')][_0xae49('0x19')](_0x20ce33)[_0xae49('0x22')](function(_0x823a1e){_0x16c99f[_0xae49('0x19')]=_0x823a1e;if(_0x54051a[_0xae49('0x31')][_0xae49('0x42')]){_0x2f63cf[_0xae49('0x43')]=[{'all':!![]}];}return db['MailSubstatus'][_0xae49('0x44')](_0x2f63cf);})[_0xae49('0x22')](function(_0xc666cc){_0x16c99f[_0xae49('0x45')]=_0xc666cc;return _0x16c99f;})[_0xae49('0x22')](respondWithFilteredResult(_0x5e2f12,_0x2f63cf))[_0xae49('0x46')](handleError(_0x5e2f12,null));};exports['show']=function(_0x3088eb,_0x5f536b){var _0x11b9b8={'raw':!![],'where':{'id':_0x3088eb[_0xae49('0x47')]['id']}},_0x5d282e={};_0x5d282e[_0xae49('0x2f')]=_[_0xae49('0x32')](db[_0xae49('0x2a')]['rawAttributes']);_0x5d282e[_0xae49('0x31')]=_[_0xae49('0x32')](_0x3088eb[_0xae49('0x31')]);_0x5d282e[_0xae49('0x3c')]=_[_0xae49('0x33')](_0x5d282e[_0xae49('0x2f')],_0x5d282e['query']);_0x11b9b8[_0xae49('0x35')]=_['intersection'](_0x5d282e[_0xae49('0x2f')],qs[_0xae49('0x34')](_0x3088eb[_0xae49('0x31')][_0xae49('0x34')]));_0x11b9b8[_0xae49('0x35')]=_0x11b9b8[_0xae49('0x35')][_0xae49('0x36')]?_0x11b9b8[_0xae49('0x35')]:_0x5d282e[_0xae49('0x2f')];if(_0x3088eb['query'][_0xae49('0x42')]){_0x11b9b8[_0xae49('0x43')]=[{'all':!![]}];}_0x11b9b8=_[_0xae49('0x3e')]({},_0x11b9b8,_0x3088eb['options']);return db[_0xae49('0x2a')][_0xae49('0x48')](_0x11b9b8)[_0xae49('0x22')](handleEntityNotFound(_0x5f536b,null))[_0xae49('0x22')](respondWithResult(_0x5f536b,null))[_0xae49('0x46')](handleError(_0x5f536b,null));};exports['create']=function(_0x4713ce,_0x424132){return db['MailSubstatus'][_0xae49('0x49')](_0x4713ce[_0xae49('0x4a')],{})[_0xae49('0x22')](respondWithResult(_0x424132,0xc9))[_0xae49('0x46')](handleError(_0x424132,null));};exports[_0xae49('0x21')]=function(_0x2ac4ff,_0x442f20){if(_0x2ac4ff[_0xae49('0x4a')]['id']){delete _0x2ac4ff['body']['id'];}return db[_0xae49('0x2a')]['find']({'where':{'id':_0x2ac4ff[_0xae49('0x47')]['id']}})[_0xae49('0x22')](handleEntityNotFound(_0x442f20,null))[_0xae49('0x22')](saveUpdates(_0x2ac4ff['body'],null))['then'](respondWithResult(_0x442f20,null))[_0xae49('0x46')](handleError(_0x442f20,null));};exports[_0xae49('0x23')]=function(_0x1fca0f,_0x2ac966){return db['MailSubstatus'][_0xae49('0x48')]({'where':{'id':_0x1fca0f[_0xae49('0x47')]['id']}})[_0xae49('0x22')](handleEntityNotFound(_0x2ac966,null))[_0xae49('0x22')](removeEntity(_0x2ac966,null))[_0xae49('0x46')](handleError(_0x2ac966,null));};exports[_0xae49('0x4b')]=function(_0x1547e2,_0x298309){return db[_0xae49('0x2a')][_0xae49('0x4b')]()[_0xae49('0x22')](respondWithResult(_0x298309,null))[_0xae49('0x46')](handleError(_0x298309,null));};
\ No newline at end of file
+var _0x4c90=['fields','hasOwnProperty','nolimit','limit','order','sort','where','filters','pick','filter','merge','VIRTUAL','options','findAll','rows','catch','show','keys','includeAll','include','find','body','params','describe','html-pdf','eml-format','zip-dir','fast-json-patch','moment','mustache','to-csv','ejs','lodash','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','status','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','MailSubstatus','rawAttributes','fieldName','type','key','map','query','intersection','model','attributes'];(function(_0x2e80e1,_0xf3855d){var _0x73679f=function(_0x2a1914){while(--_0x2a1914){_0x2e80e1['push'](_0x2e80e1['shift']());}};_0x73679f(++_0xf3855d);}(_0x4c90,0x18f));var _0x04c9=function(_0xdea882,_0x7157d2){_0xdea882=_0xdea882-0x0;var _0xffb071=_0x4c90[_0xdea882];return _0xffb071;};'use strict';var pdf=require(_0x04c9('0x0'));var emlformat=require(_0x04c9('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x04c9('0x2'));var jsonpatch=require(_0x04c9('0x3'));var rp=require('request-promise');var moment=require(_0x04c9('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x04c9('0x5'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x04c9('0x6'));var ejs=require(_0x04c9('0x7'));var fs=require('fs');var _=require(_0x04c9('0x8'));var squel=require('squel');var crypto=require(_0x04c9('0x9'));var jsforce=require(_0x04c9('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x04c9('0xb'));var Redis=require(_0x04c9('0xc'));var authService=require(_0x04c9('0xd'));var qs=require(_0x04c9('0xe'));var as=require(_0x04c9('0xf'));var hardwareService=require(_0x04c9('0x10'));var logger=require(_0x04c9('0x11'))(_0x04c9('0x12'));var utils=require('../../config/utils');var config=require(_0x04c9('0x13'));var licenseUtil=require(_0x04c9('0x14'));var db=require(_0x04c9('0x15'))['db'];function respondWithStatusCode(_0x3180df,_0xf8f6a7){_0xf8f6a7=_0xf8f6a7||0xcc;return function(_0x59c8d4){if(_0x59c8d4){return _0x3180df[_0x04c9('0x16')](_0xf8f6a7);}return _0x3180df['status'](_0xf8f6a7)[_0x04c9('0x17')]();};}function respondWithResult(_0x28d106,_0x2fd157){_0x2fd157=_0x2fd157||0xc8;return function(_0x2c0d32){if(_0x2c0d32){return _0x28d106[_0x04c9('0x18')](_0x2fd157)[_0x04c9('0x19')](_0x2c0d32);}};}function respondWithFilteredResult(_0x46fef3,_0xd1ddb1){return function(_0x197f58){if(_0x197f58){var _0x5f30c1=_0x197f58[_0x04c9('0x1a')],_0x3986a2=_0xd1ddb1[_0x04c9('0x1b')],_0x994ae9=_0xd1ddb1[_0x04c9('0x1b')]+_0xd1ddb1['limit'],_0x1e332c;if(_0x994ae9>=_0x5f30c1){_0x994ae9=_0x5f30c1;_0x1e332c=0xc8;}else{_0x1e332c=0xce;}_0x46fef3[_0x04c9('0x18')](_0x1e332c);return _0x46fef3[_0x04c9('0x1c')](_0x04c9('0x1d'),_0x3986a2+'-'+_0x994ae9+'/'+_0x5f30c1)['json'](_0x197f58);}return null;};}function patchUpdates(_0x11e5e7){return function(_0x36fade){try{jsonpatch[_0x04c9('0x1e')](_0x36fade,_0x11e5e7,!![]);}catch(_0x39e713){return BPromise[_0x04c9('0x1f')](_0x39e713);}return _0x36fade[_0x04c9('0x20')]();};}function saveUpdates(_0x5c7e02,_0x436c43){return function(_0x43882e){if(_0x43882e){return _0x43882e[_0x04c9('0x21')](_0x5c7e02)[_0x04c9('0x22')](function(_0x43b105){return _0x43b105;});}return null;};}function removeEntity(_0x31f8e0,_0x5b5f03){return function(_0xccd09c){if(_0xccd09c){return _0xccd09c[_0x04c9('0x23')]()[_0x04c9('0x22')](function(){_0x31f8e0[_0x04c9('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0xc59229,_0x3b7744){return function(_0x50440){if(!_0x50440){_0xc59229[_0x04c9('0x16')](0x194);}return _0x50440;};}function handleError(_0x3affa5,_0x34e8b1){_0x34e8b1=_0x34e8b1||0x1f4;return function(_0x415365){logger[_0x04c9('0x24')](_0x415365[_0x04c9('0x25')]);if(_0x415365[_0x04c9('0x26')]){delete _0x415365[_0x04c9('0x26')];}_0x3affa5['status'](_0x34e8b1)[_0x04c9('0x27')](_0x415365);};}exports[_0x04c9('0x28')]=function(_0x294a21,_0x4fb993){var _0x8815aa={},_0x49c638={},_0x56928a={'count':0x0,'rows':[]};var _0x5320de=_['map'](db[_0x04c9('0x29')][_0x04c9('0x2a')],function(_0x4b8545){return{'name':_0x4b8545[_0x04c9('0x2b')],'type':_0x4b8545[_0x04c9('0x2c')][_0x04c9('0x2d')]};});_0x49c638['model']=_[_0x04c9('0x2e')](_0x5320de,'name');_0x49c638[_0x04c9('0x2f')]=_['keys'](_0x294a21[_0x04c9('0x2f')]);_0x49c638['filters']=_[_0x04c9('0x30')](_0x49c638[_0x04c9('0x31')],_0x49c638[_0x04c9('0x2f')]);_0x8815aa[_0x04c9('0x32')]=_[_0x04c9('0x30')](_0x49c638['model'],qs[_0x04c9('0x33')](_0x294a21[_0x04c9('0x2f')][_0x04c9('0x33')]));_0x8815aa[_0x04c9('0x32')]=_0x8815aa[_0x04c9('0x32')]['length']?_0x8815aa['attributes']:_0x49c638[_0x04c9('0x31')];if(!_0x294a21['query'][_0x04c9('0x34')](_0x04c9('0x35'))){_0x8815aa[_0x04c9('0x36')]=qs[_0x04c9('0x36')](_0x294a21[_0x04c9('0x2f')][_0x04c9('0x36')]);_0x8815aa['offset']=qs[_0x04c9('0x1b')](_0x294a21[_0x04c9('0x2f')][_0x04c9('0x1b')]);}_0x8815aa[_0x04c9('0x37')]=qs[_0x04c9('0x38')](_0x294a21[_0x04c9('0x2f')][_0x04c9('0x38')]);_0x8815aa[_0x04c9('0x39')]=qs[_0x04c9('0x3a')](_[_0x04c9('0x3b')](_0x294a21[_0x04c9('0x2f')],_0x49c638[_0x04c9('0x3a')]),_0x5320de);if(_0x294a21[_0x04c9('0x2f')][_0x04c9('0x3c')]){_0x8815aa[_0x04c9('0x39')]=_[_0x04c9('0x3d')](_0x8815aa[_0x04c9('0x39')],{'$or':_['map'](_0x5320de,function(_0x52dec8){if(_0x52dec8['type']!==_0x04c9('0x3e')){var _0xb2872d={};_0xb2872d[_0x52dec8[_0x04c9('0x26')]]={'$like':'%'+_0x294a21[_0x04c9('0x2f')]['filter']+'%'};return _0xb2872d;}})});}_0x8815aa=_[_0x04c9('0x3d')]({},_0x8815aa,_0x294a21[_0x04c9('0x3f')]);var _0x207e99={'where':_0x8815aa[_0x04c9('0x39')]};return db[_0x04c9('0x29')]['count'](_0x207e99)[_0x04c9('0x22')](function(_0xf6a635){_0x56928a[_0x04c9('0x1a')]=_0xf6a635;if(_0x294a21['query']['includeAll']){_0x8815aa['include']=[{'all':!![]}];}return db['MailSubstatus'][_0x04c9('0x40')](_0x8815aa);})[_0x04c9('0x22')](function(_0x2d1418){_0x56928a[_0x04c9('0x41')]=_0x2d1418;return _0x56928a;})[_0x04c9('0x22')](respondWithFilteredResult(_0x4fb993,_0x8815aa))[_0x04c9('0x42')](handleError(_0x4fb993,null));};exports[_0x04c9('0x43')]=function(_0x863a65,_0x3ef6d6){var _0x3f8303={'raw':!![],'where':{'id':_0x863a65['params']['id']}},_0x2a4249={};_0x2a4249[_0x04c9('0x31')]=_[_0x04c9('0x44')](db['MailSubstatus']['rawAttributes']);_0x2a4249[_0x04c9('0x2f')]=_[_0x04c9('0x44')](_0x863a65[_0x04c9('0x2f')]);_0x2a4249['filters']=_['intersection'](_0x2a4249['model'],_0x2a4249[_0x04c9('0x2f')]);_0x3f8303[_0x04c9('0x32')]=_[_0x04c9('0x30')](_0x2a4249[_0x04c9('0x31')],qs[_0x04c9('0x33')](_0x863a65[_0x04c9('0x2f')][_0x04c9('0x33')]));_0x3f8303[_0x04c9('0x32')]=_0x3f8303['attributes']['length']?_0x3f8303[_0x04c9('0x32')]:_0x2a4249[_0x04c9('0x31')];if(_0x863a65[_0x04c9('0x2f')][_0x04c9('0x45')]){_0x3f8303[_0x04c9('0x46')]=[{'all':!![]}];}_0x3f8303=_[_0x04c9('0x3d')]({},_0x3f8303,_0x863a65['options']);return db[_0x04c9('0x29')][_0x04c9('0x47')](_0x3f8303)['then'](handleEntityNotFound(_0x3ef6d6,null))[_0x04c9('0x22')](respondWithResult(_0x3ef6d6,null))[_0x04c9('0x42')](handleError(_0x3ef6d6,null));};exports['create']=function(_0x447e10,_0x253b73){return db['MailSubstatus']['create'](_0x447e10['body'],{})['then'](respondWithResult(_0x253b73,0xc9))['catch'](handleError(_0x253b73,null));};exports['update']=function(_0x2f18b2,_0x185e6c){if(_0x2f18b2['body']['id']){delete _0x2f18b2[_0x04c9('0x48')]['id'];}return db[_0x04c9('0x29')][_0x04c9('0x47')]({'where':{'id':_0x2f18b2['params']['id']}})[_0x04c9('0x22')](handleEntityNotFound(_0x185e6c,null))[_0x04c9('0x22')](saveUpdates(_0x2f18b2[_0x04c9('0x48')],null))[_0x04c9('0x22')](respondWithResult(_0x185e6c,null))[_0x04c9('0x42')](handleError(_0x185e6c,null));};exports[_0x04c9('0x23')]=function(_0x69e927,_0x4230bf){return db[_0x04c9('0x29')][_0x04c9('0x47')]({'where':{'id':_0x69e927[_0x04c9('0x49')]['id']}})[_0x04c9('0x22')](handleEntityNotFound(_0x4230bf,null))[_0x04c9('0x22')](removeEntity(_0x4230bf,null))[_0x04c9('0x42')](handleError(_0x4230bf,null));};exports[_0x04c9('0x4a')]=function(_0x889cfa,_0x4c830e){return db[_0x04c9('0x29')][_0x04c9('0x4a')]()[_0x04c9('0x22')](respondWithResult(_0x4c830e,null))[_0x04c9('0x42')](handleError(_0x4c830e,null));};
\ No newline at end of file