Built motion from commit d5e4af8c.|2.6.23
[motion2.git] / server / api / mailServerOut / mailServerOut.controller.js
index d457d08..85b2728 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc37f=['../../mysqldb','sendStatus','end','offset','limit','undefined','count','status','set','Content-Range','json','apply','reject','save','destroy','then','error','name','send','map','MailServerOut','rawAttributes','type','key','model','query','keys','intersection','fields','attributes','length','order','sort','filters','filter','where','VIRTUAL','merge','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','update','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/utils','../../config/environment','../../config/license/util'];(function(_0x72493a,_0x158721){var _0x4c6027=function(_0x471e97){while(--_0x471e97){_0x72493a['push'](_0x72493a['shift']());}};_0x4c6027(++_0x158721);}(_0xc37f,0x10d));var _0xfc37=function(_0x2699bb,_0x4367f3){_0x2699bb=_0x2699bb-0x0;var _0x12c137=_0xc37f[_0x2699bb];return _0x12c137;};'use strict';var emlformat=require(_0xfc37('0x0'));var rimraf=require(_0xfc37('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xfc37('0x2'));var rp=require(_0xfc37('0x3'));var moment=require('moment');var BPromise=require(_0xfc37('0x4'));var Mustache=require(_0xfc37('0x5'));var util=require(_0xfc37('0x6'));var path=require('path');var sox=require(_0xfc37('0x7'));var csv=require(_0xfc37('0x8'));var ejs=require(_0xfc37('0x9'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require(_0xfc37('0xa'));var squel=require(_0xfc37('0xb'));var crypto=require(_0xfc37('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xfc37('0xd'));var toCsv=require('to-csv');var querystring=require(_0xfc37('0xe'));var Papa=require('papaparse');var Redis=require(_0xfc37('0xf'));var authService=require(_0xfc37('0x10'));var qs=require(_0xfc37('0x11'));var as=require(_0xfc37('0x12'));var hardwareService=require(_0xfc37('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0xfc37('0x14'));var config=require(_0xfc37('0x15'));var licenseUtil=require(_0xfc37('0x16'));var db=require(_0xfc37('0x17'))['db'];function respondWithStatusCode(_0x396ec2,_0x28d582){_0x28d582=_0x28d582||0xcc;return function(_0x23ff3a){if(_0x23ff3a){return _0x396ec2[_0xfc37('0x18')](_0x28d582);}return _0x396ec2['status'](_0x28d582)[_0xfc37('0x19')]();};}function respondWithResult(_0x4097d0,_0x50caef){_0x50caef=_0x50caef||0xc8;return function(_0x1d5a74){if(_0x1d5a74){return _0x4097d0['status'](_0x50caef)['json'](_0x1d5a74);}};}function respondWithFilteredResult(_0x1d318a,_0x5d6a50){return function(_0x157b8a){if(_0x157b8a){var _0x25a05b=typeof _0x5d6a50[_0xfc37('0x1a')]==='undefined'&&typeof _0x5d6a50[_0xfc37('0x1b')]===_0xfc37('0x1c');var _0x3039b2=_0x157b8a['count'];var _0x1d4118=_0x25a05b?0x0:_0x5d6a50['offset'];var _0x4655dc=_0x25a05b?_0x157b8a[_0xfc37('0x1d')]:_0x5d6a50[_0xfc37('0x1a')]+_0x5d6a50[_0xfc37('0x1b')];var _0x1c933b;if(_0x4655dc>=_0x3039b2){_0x4655dc=_0x3039b2;_0x1c933b=0xc8;}else{_0x1c933b=0xce;}_0x1d318a[_0xfc37('0x1e')](_0x1c933b);return _0x1d318a[_0xfc37('0x1f')](_0xfc37('0x20'),_0x1d4118+'-'+_0x4655dc+'/'+_0x3039b2)[_0xfc37('0x21')](_0x157b8a);}return null;};}function patchUpdates(_0x186d40){return function(_0x157ce7){try{jsonpatch[_0xfc37('0x22')](_0x157ce7,_0x186d40,!![]);}catch(_0x4522db){return BPromise[_0xfc37('0x23')](_0x4522db);}return _0x157ce7[_0xfc37('0x24')]();};}function saveUpdates(_0x5cea4c,_0x2f4f98){return function(_0x1d28cb){if(_0x1d28cb){return _0x1d28cb['update'](_0x5cea4c)['then'](function(_0x1a5fda){return _0x1a5fda;});}return null;};}function removeEntity(_0x1be596,_0x40beb9){return function(_0x2792f1){if(_0x2792f1){return _0x2792f1[_0xfc37('0x25')]()[_0xfc37('0x26')](function(){_0x1be596[_0xfc37('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x304c26,_0x581064){return function(_0x1b4a31){if(!_0x1b4a31){_0x304c26[_0xfc37('0x18')](0x194);}return _0x1b4a31;};}function handleError(_0x1a2ebc,_0x32486e){_0x32486e=_0x32486e||0x1f4;return function(_0x1622ae){logger[_0xfc37('0x27')](_0x1622ae['stack']);if(_0x1622ae[_0xfc37('0x28')]){delete _0x1622ae[_0xfc37('0x28')];}_0x1a2ebc['status'](_0x32486e)[_0xfc37('0x29')](_0x1622ae);};}exports['index']=function(_0x35bd24,_0x249b47){var _0x3846ea={},_0x2b6cd6={},_0x2fead5={'count':0x0,'rows':[]};var _0x1b4e38=_[_0xfc37('0x2a')](db[_0xfc37('0x2b')][_0xfc37('0x2c')],function(_0x18b06f){return{'name':_0x18b06f['fieldName'],'type':_0x18b06f[_0xfc37('0x2d')][_0xfc37('0x2e')]};});_0x2b6cd6[_0xfc37('0x2f')]=_['map'](_0x1b4e38,'name');_0x2b6cd6[_0xfc37('0x30')]=_[_0xfc37('0x31')](_0x35bd24[_0xfc37('0x30')]);_0x2b6cd6['filters']=_[_0xfc37('0x32')](_0x2b6cd6['model'],_0x2b6cd6[_0xfc37('0x30')]);_0x3846ea['attributes']=_['intersection'](_0x2b6cd6[_0xfc37('0x2f')],qs[_0xfc37('0x33')](_0x35bd24[_0xfc37('0x30')][_0xfc37('0x33')]));_0x3846ea[_0xfc37('0x34')]=_0x3846ea['attributes'][_0xfc37('0x35')]?_0x3846ea[_0xfc37('0x34')]:_0x2b6cd6[_0xfc37('0x2f')];if(!_0x35bd24['query']['hasOwnProperty']('nolimit')){_0x3846ea['limit']=qs[_0xfc37('0x1b')](_0x35bd24[_0xfc37('0x30')][_0xfc37('0x1b')]);_0x3846ea[_0xfc37('0x1a')]=qs[_0xfc37('0x1a')](_0x35bd24[_0xfc37('0x30')][_0xfc37('0x1a')]);}_0x3846ea[_0xfc37('0x36')]=qs[_0xfc37('0x37')](_0x35bd24[_0xfc37('0x30')]['sort']);_0x3846ea['where']=qs[_0xfc37('0x38')](_['pick'](_0x35bd24[_0xfc37('0x30')],_0x2b6cd6[_0xfc37('0x38')]),_0x1b4e38);if(_0x35bd24[_0xfc37('0x30')][_0xfc37('0x39')]){_0x3846ea[_0xfc37('0x3a')]=_['merge'](_0x3846ea[_0xfc37('0x3a')],{'$or':_[_0xfc37('0x2a')](_0x1b4e38,function(_0x203e08){if(_0x203e08[_0xfc37('0x2d')]!==_0xfc37('0x3b')){var _0x527e09={};_0x527e09[_0x203e08[_0xfc37('0x28')]]={'$like':'%'+_0x35bd24[_0xfc37('0x30')]['filter']+'%'};return _0x527e09;}})});}_0x3846ea=_[_0xfc37('0x3c')]({},_0x3846ea,_0x35bd24[_0xfc37('0x3d')]);var _0x212d94={'where':_0x3846ea[_0xfc37('0x3a')]};return db[_0xfc37('0x2b')][_0xfc37('0x1d')](_0x212d94)[_0xfc37('0x26')](function(_0x39c30b){_0x2fead5['count']=_0x39c30b;if(_0x35bd24[_0xfc37('0x30')][_0xfc37('0x3e')]){_0x3846ea[_0xfc37('0x3f')]=[{'all':!![]}];}return db[_0xfc37('0x2b')][_0xfc37('0x40')](_0x3846ea);})['then'](function(_0x3f69aa){_0x2fead5[_0xfc37('0x41')]=_0x3f69aa;return _0x2fead5;})[_0xfc37('0x26')](respondWithFilteredResult(_0x249b47,_0x3846ea))[_0xfc37('0x42')](handleError(_0x249b47,null));};exports[_0xfc37('0x43')]=function(_0x1b9668,_0x275ae3){var _0x1d1043={'raw':!![],'where':{'id':_0x1b9668[_0xfc37('0x44')]['id']}},_0x4f7d60={};_0x4f7d60[_0xfc37('0x2f')]=_['keys'](db[_0xfc37('0x2b')][_0xfc37('0x2c')]);_0x4f7d60[_0xfc37('0x30')]=_['keys'](_0x1b9668[_0xfc37('0x30')]);_0x4f7d60[_0xfc37('0x38')]=_[_0xfc37('0x32')](_0x4f7d60[_0xfc37('0x2f')],_0x4f7d60['query']);_0x1d1043[_0xfc37('0x34')]=_[_0xfc37('0x32')](_0x4f7d60[_0xfc37('0x2f')],qs[_0xfc37('0x33')](_0x1b9668[_0xfc37('0x30')][_0xfc37('0x33')]));_0x1d1043[_0xfc37('0x34')]=_0x1d1043[_0xfc37('0x34')][_0xfc37('0x35')]?_0x1d1043[_0xfc37('0x34')]:_0x4f7d60[_0xfc37('0x2f')];if(_0x1b9668[_0xfc37('0x30')][_0xfc37('0x3e')]){_0x1d1043[_0xfc37('0x3f')]=[{'all':!![]}];}_0x1d1043=_[_0xfc37('0x3c')]({},_0x1d1043,_0x1b9668[_0xfc37('0x3d')]);return db[_0xfc37('0x2b')][_0xfc37('0x45')](_0x1d1043)[_0xfc37('0x26')](handleEntityNotFound(_0x275ae3,null))[_0xfc37('0x26')](respondWithResult(_0x275ae3,null))[_0xfc37('0x42')](handleError(_0x275ae3,null));};exports[_0xfc37('0x46')]=function(_0x5d98d4,_0x36a692){return db[_0xfc37('0x2b')][_0xfc37('0x46')](_0x5d98d4[_0xfc37('0x47')],{})[_0xfc37('0x26')](respondWithResult(_0x36a692,0xc9))['catch'](handleError(_0x36a692,null));};exports[_0xfc37('0x48')]=function(_0x2b3de4,_0x29d570){if(_0x2b3de4['body']['id']){delete _0x2b3de4[_0xfc37('0x47')]['id'];}return db[_0xfc37('0x2b')][_0xfc37('0x45')]({'where':{'id':_0x2b3de4['params']['id']}})['then'](handleEntityNotFound(_0x29d570,null))[_0xfc37('0x26')](saveUpdates(_0x2b3de4[_0xfc37('0x47')],null))[_0xfc37('0x26')](respondWithResult(_0x29d570,null))[_0xfc37('0x42')](handleError(_0x29d570,null));};exports[_0xfc37('0x25')]=function(_0x58ee75,_0x3065e1){return db[_0xfc37('0x2b')][_0xfc37('0x45')]({'where':{'id':_0x58ee75[_0xfc37('0x44')]['id']}})[_0xfc37('0x26')](handleEntityNotFound(_0x3065e1,null))[_0xfc37('0x26')](removeEntity(_0x3065e1,null))['catch'](handleError(_0x3065e1,null));};
\ No newline at end of file
+var _0x83d0=['fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','api','../../config/environment','sendStatus','status','json','undefined','limit','count','offset','set','Content-Range','reject','save','update','then','destroy','stack','name','send','index','MailServerOut','rawAttributes','type','key','model','map','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','merge','where','VIRTUAL','filter','options','includeAll','include','rows','catch','show','params','keys','find','create','body','eml-format','rimraf'];(function(_0x376d33,_0x1ccb15){var _0x360869=function(_0x43980a){while(--_0x43980a){_0x376d33['push'](_0x376d33['shift']());}};_0x360869(++_0x1ccb15);}(_0x83d0,0x166));var _0x083d=function(_0x87f56b,_0x65d47c){_0x87f56b=_0x87f56b-0x0;var _0x51101d=_0x83d0[_0x87f56b];return _0x51101d;};'use strict';var emlformat=require(_0x083d('0x0'));var rimraf=require(_0x083d('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x083d('0x2'));var rp=require(_0x083d('0x3'));var moment=require(_0x083d('0x4'));var BPromise=require(_0x083d('0x5'));var Mustache=require('mustache');var util=require(_0x083d('0x6'));var path=require(_0x083d('0x7'));var sox=require(_0x083d('0x8'));var csv=require(_0x083d('0x9'));var ejs=require(_0x083d('0xa'));var fs=require('fs');var fs_extra=require(_0x083d('0xb'));var _=require(_0x083d('0xc'));var squel=require(_0x083d('0xd'));var crypto=require(_0x083d('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x083d('0xf'));var toCsv=require(_0x083d('0x9'));var querystring=require(_0x083d('0x10'));var Papa=require('papaparse');var Redis=require(_0x083d('0x11'));var authService=require(_0x083d('0x12'));var qs=require(_0x083d('0x13'));var as=require(_0x083d('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x083d('0x15'));var utils=require('../../config/utils');var config=require(_0x083d('0x16'));var licenseUtil=require('../../config/license/util');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x49b50b,_0x4ecf63){_0x4ecf63=_0x4ecf63||0xcc;return function(_0x273a0c){if(_0x273a0c){return _0x49b50b[_0x083d('0x17')](_0x4ecf63);}return _0x49b50b[_0x083d('0x18')](_0x4ecf63)['end']();};}function respondWithResult(_0x4d5816,_0x2eb5ef){_0x2eb5ef=_0x2eb5ef||0xc8;return function(_0x45706f){if(_0x45706f){return _0x4d5816[_0x083d('0x18')](_0x2eb5ef)[_0x083d('0x19')](_0x45706f);}};}function respondWithFilteredResult(_0x57f126,_0x34723a){return function(_0x35c5be){if(_0x35c5be){var _0x39b2ab=typeof _0x34723a['offset']===_0x083d('0x1a')&&typeof _0x34723a[_0x083d('0x1b')]===_0x083d('0x1a');var _0xc152c0=_0x35c5be[_0x083d('0x1c')];var _0x368468=_0x39b2ab?0x0:_0x34723a[_0x083d('0x1d')];var _0x368c52=_0x39b2ab?_0x35c5be[_0x083d('0x1c')]:_0x34723a[_0x083d('0x1d')]+_0x34723a['limit'];var _0x499d4a;if(_0x368c52>=_0xc152c0){_0x368c52=_0xc152c0;_0x499d4a=0xc8;}else{_0x499d4a=0xce;}_0x57f126[_0x083d('0x18')](_0x499d4a);return _0x57f126[_0x083d('0x1e')](_0x083d('0x1f'),_0x368468+'-'+_0x368c52+'/'+_0xc152c0)[_0x083d('0x19')](_0x35c5be);}return null;};}function patchUpdates(_0x17755e){return function(_0x12ef0a){try{jsonpatch['apply'](_0x12ef0a,_0x17755e,!![]);}catch(_0x4ce360){return BPromise[_0x083d('0x20')](_0x4ce360);}return _0x12ef0a[_0x083d('0x21')]();};}function saveUpdates(_0x325def,_0x5c566c){return function(_0x12a71c){if(_0x12a71c){return _0x12a71c[_0x083d('0x22')](_0x325def)[_0x083d('0x23')](function(_0x133a93){return _0x133a93;});}return null;};}function removeEntity(_0x3b5bde,_0xbdc769){return function(_0x1a0185){if(_0x1a0185){return _0x1a0185[_0x083d('0x24')]()[_0x083d('0x23')](function(){_0x3b5bde['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x5eb69d,_0x4fb48a){return function(_0x4fe3d1){if(!_0x4fe3d1){_0x5eb69d[_0x083d('0x17')](0x194);}return _0x4fe3d1;};}function handleError(_0x335cc9,_0x499b81){_0x499b81=_0x499b81||0x1f4;return function(_0x3724ee){logger['error'](_0x3724ee[_0x083d('0x25')]);if(_0x3724ee[_0x083d('0x26')]){delete _0x3724ee[_0x083d('0x26')];}_0x335cc9[_0x083d('0x18')](_0x499b81)[_0x083d('0x27')](_0x3724ee);};}exports[_0x083d('0x28')]=function(_0x1ce2d7,_0x3302cd){var _0x21813a={},_0x30b1a2={},_0x413b24={'count':0x0,'rows':[]};var _0x48ae82=_['map'](db[_0x083d('0x29')][_0x083d('0x2a')],function(_0x3c49dd){return{'name':_0x3c49dd['fieldName'],'type':_0x3c49dd[_0x083d('0x2b')][_0x083d('0x2c')]};});_0x30b1a2[_0x083d('0x2d')]=_[_0x083d('0x2e')](_0x48ae82,_0x083d('0x26'));_0x30b1a2[_0x083d('0x2f')]=_['keys'](_0x1ce2d7['query']);_0x30b1a2[_0x083d('0x30')]=_[_0x083d('0x31')](_0x30b1a2[_0x083d('0x2d')],_0x30b1a2[_0x083d('0x2f')]);_0x21813a[_0x083d('0x32')]=_[_0x083d('0x31')](_0x30b1a2[_0x083d('0x2d')],qs[_0x083d('0x33')](_0x1ce2d7[_0x083d('0x2f')][_0x083d('0x33')]));_0x21813a[_0x083d('0x32')]=_0x21813a['attributes']['length']?_0x21813a[_0x083d('0x32')]:_0x30b1a2[_0x083d('0x2d')];if(!_0x1ce2d7['query'][_0x083d('0x34')](_0x083d('0x35'))){_0x21813a[_0x083d('0x1b')]=qs['limit'](_0x1ce2d7[_0x083d('0x2f')][_0x083d('0x1b')]);_0x21813a[_0x083d('0x1d')]=qs[_0x083d('0x1d')](_0x1ce2d7[_0x083d('0x2f')][_0x083d('0x1d')]);}_0x21813a[_0x083d('0x36')]=qs['sort'](_0x1ce2d7[_0x083d('0x2f')][_0x083d('0x37')]);_0x21813a['where']=qs[_0x083d('0x30')](_[_0x083d('0x38')](_0x1ce2d7['query'],_0x30b1a2[_0x083d('0x30')]),_0x48ae82);if(_0x1ce2d7[_0x083d('0x2f')]['filter']){_0x21813a['where']=_[_0x083d('0x39')](_0x21813a[_0x083d('0x3a')],{'$or':_[_0x083d('0x2e')](_0x48ae82,function(_0x28cdbd){if(_0x28cdbd[_0x083d('0x2b')]!==_0x083d('0x3b')){var _0x3580d5={};_0x3580d5[_0x28cdbd['name']]={'$like':'%'+_0x1ce2d7[_0x083d('0x2f')][_0x083d('0x3c')]+'%'};return _0x3580d5;}})});}_0x21813a=_[_0x083d('0x39')]({},_0x21813a,_0x1ce2d7[_0x083d('0x3d')]);var _0x3343e7={'where':_0x21813a[_0x083d('0x3a')]};return db['MailServerOut'][_0x083d('0x1c')](_0x3343e7)[_0x083d('0x23')](function(_0x2d4414){_0x413b24[_0x083d('0x1c')]=_0x2d4414;if(_0x1ce2d7[_0x083d('0x2f')][_0x083d('0x3e')]){_0x21813a[_0x083d('0x3f')]=[{'all':!![]}];}return db[_0x083d('0x29')]['findAll'](_0x21813a);})[_0x083d('0x23')](function(_0x336c35){_0x413b24[_0x083d('0x40')]=_0x336c35;return _0x413b24;})[_0x083d('0x23')](respondWithFilteredResult(_0x3302cd,_0x21813a))[_0x083d('0x41')](handleError(_0x3302cd,null));};exports[_0x083d('0x42')]=function(_0x291812,_0x71f083){var _0x3c8f0={'raw':!![],'where':{'id':_0x291812[_0x083d('0x43')]['id']}},_0x5a1d80={};_0x5a1d80[_0x083d('0x2d')]=_[_0x083d('0x44')](db[_0x083d('0x29')]['rawAttributes']);_0x5a1d80[_0x083d('0x2f')]=_[_0x083d('0x44')](_0x291812[_0x083d('0x2f')]);_0x5a1d80[_0x083d('0x30')]=_[_0x083d('0x31')](_0x5a1d80[_0x083d('0x2d')],_0x5a1d80[_0x083d('0x2f')]);_0x3c8f0[_0x083d('0x32')]=_[_0x083d('0x31')](_0x5a1d80['model'],qs[_0x083d('0x33')](_0x291812[_0x083d('0x2f')][_0x083d('0x33')]));_0x3c8f0['attributes']=_0x3c8f0[_0x083d('0x32')]['length']?_0x3c8f0[_0x083d('0x32')]:_0x5a1d80[_0x083d('0x2d')];if(_0x291812[_0x083d('0x2f')]['includeAll']){_0x3c8f0['include']=[{'all':!![]}];}_0x3c8f0=_['merge']({},_0x3c8f0,_0x291812[_0x083d('0x3d')]);return db[_0x083d('0x29')][_0x083d('0x45')](_0x3c8f0)[_0x083d('0x23')](handleEntityNotFound(_0x71f083,null))[_0x083d('0x23')](respondWithResult(_0x71f083,null))['catch'](handleError(_0x71f083,null));};exports[_0x083d('0x46')]=function(_0x7b4bcf,_0x12b597){return db[_0x083d('0x29')][_0x083d('0x46')](_0x7b4bcf[_0x083d('0x47')],{})[_0x083d('0x23')](respondWithResult(_0x12b597,0xc9))[_0x083d('0x41')](handleError(_0x12b597,null));};exports[_0x083d('0x22')]=function(_0xa39cdb,_0x407b27){if(_0xa39cdb[_0x083d('0x47')]['id']){delete _0xa39cdb['body']['id'];}return db[_0x083d('0x29')][_0x083d('0x45')]({'where':{'id':_0xa39cdb[_0x083d('0x43')]['id']}})[_0x083d('0x23')](handleEntityNotFound(_0x407b27,null))[_0x083d('0x23')](saveUpdates(_0xa39cdb[_0x083d('0x47')],null))['then'](respondWithResult(_0x407b27,null))['catch'](handleError(_0x407b27,null));};exports[_0x083d('0x24')]=function(_0xc28480,_0x67755d){return db['MailServerOut'][_0x083d('0x45')]({'where':{'id':_0xc28480[_0x083d('0x43')]['id']}})['then'](handleEntityNotFound(_0x67755d,null))[_0x083d('0x23')](removeEntity(_0x67755d,null))[_0x083d('0x41')](handleError(_0x67755d,null));};
\ No newline at end of file