Built motion from commit c738b9ac.|2.6.25
[motion2.git] / server / api / intFreshsalesField / intFreshsalesField.controller.js
index b5fdf88..0c15291 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f89=['../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','json','undefined','limit','count','offset','Content-Range','apply','reject','save','update','then','destroy','end','error','stack','name','send','index','map','FreshsalesField','fieldName','key','model','query','keys','filters','attributes','fields','hasOwnProperty','nolimit','sort','where','pick','filter','VIRTUAL','merge','options','includeAll','include','findAll','rows','show','params','rawAttributes','intersection','length','find','catch','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','fs-extra','lodash','squel','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api'];(function(_0x5d7227,_0x12aebe){var _0x15ac55=function(_0x58d13e){while(--_0x58d13e){_0x5d7227['push'](_0x5d7227['shift']());}};_0x15ac55(++_0x12aebe);}(_0x5f89,0xd5));var _0x95f8=function(_0x13e6e1,_0x22c6f9){_0x13e6e1=_0x13e6e1-0x0;var _0xab9bd6=_0x5f89[_0x13e6e1];return _0xab9bd6;};'use strict';var emlformat=require(_0x95f8('0x0'));var rimraf=require(_0x95f8('0x1'));var zipdir=require(_0x95f8('0x2'));var jsonpatch=require(_0x95f8('0x3'));var rp=require(_0x95f8('0x4'));var moment=require(_0x95f8('0x5'));var BPromise=require(_0x95f8('0x6'));var Mustache=require(_0x95f8('0x7'));var util=require('util');var path=require(_0x95f8('0x8'));var sox=require(_0x95f8('0x9'));var csv=require(_0x95f8('0xa'));var ejs=require(_0x95f8('0xb'));var fs=require('fs');var fs_extra=require(_0x95f8('0xc'));var _=require(_0x95f8('0xd'));var squel=require(_0x95f8('0xe'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x95f8('0xa'));var querystring=require(_0x95f8('0xf'));var Papa=require(_0x95f8('0x10'));var Redis=require(_0x95f8('0x11'));var authService=require(_0x95f8('0x12'));var qs=require(_0x95f8('0x13'));var as=require(_0x95f8('0x14'));var hardwareService=require(_0x95f8('0x15'));var logger=require(_0x95f8('0x16'))(_0x95f8('0x17'));var utils=require(_0x95f8('0x18'));var config=require(_0x95f8('0x19'));var licenseUtil=require(_0x95f8('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x151921,_0x1caef8){_0x1caef8=_0x1caef8||0xcc;return function(_0x2501de){if(_0x2501de){return _0x151921[_0x95f8('0x1b')](_0x1caef8);}return _0x151921['status'](_0x1caef8)['end']();};}function respondWithResult(_0x45062f,_0x428e2d){_0x428e2d=_0x428e2d||0xc8;return function(_0x456d5f){if(_0x456d5f){return _0x45062f[_0x95f8('0x1c')](_0x428e2d)[_0x95f8('0x1d')](_0x456d5f);}};}function respondWithFilteredResult(_0x2ac577,_0x13c45f){return function(_0x1ef1c3){if(_0x1ef1c3){var _0x48544a=typeof _0x13c45f['offset']===_0x95f8('0x1e')&&typeof _0x13c45f[_0x95f8('0x1f')]===_0x95f8('0x1e');var _0x21942f=_0x1ef1c3[_0x95f8('0x20')];var _0x55c5b9=_0x48544a?0x0:_0x13c45f[_0x95f8('0x21')];var _0x471695=_0x48544a?_0x1ef1c3['count']:_0x13c45f[_0x95f8('0x21')]+_0x13c45f[_0x95f8('0x1f')];var _0xf23dc6;if(_0x471695>=_0x21942f){_0x471695=_0x21942f;_0xf23dc6=0xc8;}else{_0xf23dc6=0xce;}_0x2ac577[_0x95f8('0x1c')](_0xf23dc6);return _0x2ac577['set'](_0x95f8('0x22'),_0x55c5b9+'-'+_0x471695+'/'+_0x21942f)[_0x95f8('0x1d')](_0x1ef1c3);}return null;};}function patchUpdates(_0x142c9d){return function(_0x2da98f){try{jsonpatch[_0x95f8('0x23')](_0x2da98f,_0x142c9d,!![]);}catch(_0x138738){return BPromise[_0x95f8('0x24')](_0x138738);}return _0x2da98f[_0x95f8('0x25')]();};}function saveUpdates(_0x392540,_0x4d214a){return function(_0x22bbf1){if(_0x22bbf1){return _0x22bbf1[_0x95f8('0x26')](_0x392540)[_0x95f8('0x27')](function(_0x311145){return _0x311145;});}return null;};}function removeEntity(_0x527553,_0x5d6223){return function(_0x4ded83){if(_0x4ded83){return _0x4ded83[_0x95f8('0x28')]()['then'](function(){_0x527553['status'](0xcc)[_0x95f8('0x29')]();});}};}function handleEntityNotFound(_0x212fc5,_0x425b17){return function(_0x2516e5){if(!_0x2516e5){_0x212fc5[_0x95f8('0x1b')](0x194);}return _0x2516e5;};}function handleError(_0x477d44,_0x187d96){_0x187d96=_0x187d96||0x1f4;return function(_0x1252b9){logger[_0x95f8('0x2a')](_0x1252b9[_0x95f8('0x2b')]);if(_0x1252b9[_0x95f8('0x2c')]){delete _0x1252b9[_0x95f8('0x2c')];}_0x477d44[_0x95f8('0x1c')](_0x187d96)[_0x95f8('0x2d')](_0x1252b9);};}exports[_0x95f8('0x2e')]=function(_0x4bb61d,_0x64f565){var _0x1c7615={},_0x506785={},_0x94a55c={'count':0x0,'rows':[]};var _0x222241=_[_0x95f8('0x2f')](db[_0x95f8('0x30')]['rawAttributes'],function(_0x506d00){return{'name':_0x506d00[_0x95f8('0x31')],'type':_0x506d00['type'][_0x95f8('0x32')]};});_0x506785[_0x95f8('0x33')]=_[_0x95f8('0x2f')](_0x222241,_0x95f8('0x2c'));_0x506785[_0x95f8('0x34')]=_[_0x95f8('0x35')](_0x4bb61d[_0x95f8('0x34')]);_0x506785[_0x95f8('0x36')]=_['intersection'](_0x506785[_0x95f8('0x33')],_0x506785['query']);_0x1c7615[_0x95f8('0x37')]=_['intersection'](_0x506785['model'],qs[_0x95f8('0x38')](_0x4bb61d[_0x95f8('0x34')][_0x95f8('0x38')]));_0x1c7615['attributes']=_0x1c7615[_0x95f8('0x37')]['length']?_0x1c7615[_0x95f8('0x37')]:_0x506785['model'];if(!_0x4bb61d['query'][_0x95f8('0x39')](_0x95f8('0x3a'))){_0x1c7615[_0x95f8('0x1f')]=qs[_0x95f8('0x1f')](_0x4bb61d[_0x95f8('0x34')]['limit']);_0x1c7615[_0x95f8('0x21')]=qs[_0x95f8('0x21')](_0x4bb61d['query'][_0x95f8('0x21')]);}_0x1c7615['order']=qs['sort'](_0x4bb61d[_0x95f8('0x34')][_0x95f8('0x3b')]);_0x1c7615[_0x95f8('0x3c')]=qs[_0x95f8('0x36')](_[_0x95f8('0x3d')](_0x4bb61d[_0x95f8('0x34')],_0x506785[_0x95f8('0x36')]),_0x222241);if(_0x4bb61d[_0x95f8('0x34')][_0x95f8('0x3e')]){_0x1c7615['where']=_['merge'](_0x1c7615[_0x95f8('0x3c')],{'$or':_[_0x95f8('0x2f')](_0x222241,function(_0x4c65c7){if(_0x4c65c7['type']!==_0x95f8('0x3f')){var _0x57f70e={};_0x57f70e[_0x4c65c7['name']]={'$like':'%'+_0x4bb61d[_0x95f8('0x34')]['filter']+'%'};return _0x57f70e;}})});}_0x1c7615=_[_0x95f8('0x40')]({},_0x1c7615,_0x4bb61d[_0x95f8('0x41')]);var _0x52cf72={'where':_0x1c7615[_0x95f8('0x3c')]};return db['FreshsalesField'][_0x95f8('0x20')](_0x52cf72)[_0x95f8('0x27')](function(_0x5aabbe){_0x94a55c[_0x95f8('0x20')]=_0x5aabbe;if(_0x4bb61d[_0x95f8('0x34')][_0x95f8('0x42')]){_0x1c7615[_0x95f8('0x43')]=[{'all':!![]}];}return db[_0x95f8('0x30')][_0x95f8('0x44')](_0x1c7615);})[_0x95f8('0x27')](function(_0x1945df){_0x94a55c[_0x95f8('0x45')]=_0x1945df;return _0x94a55c;})['then'](respondWithFilteredResult(_0x64f565,_0x1c7615))['catch'](handleError(_0x64f565,null));};exports[_0x95f8('0x46')]=function(_0x2bc05e,_0x59002a){var _0x8ab106={'raw':!![],'where':{'id':_0x2bc05e[_0x95f8('0x47')]['id']}},_0x35f144={};_0x35f144['model']=_['keys'](db['FreshsalesField'][_0x95f8('0x48')]);_0x35f144[_0x95f8('0x34')]=_[_0x95f8('0x35')](_0x2bc05e[_0x95f8('0x34')]);_0x35f144[_0x95f8('0x36')]=_[_0x95f8('0x49')](_0x35f144[_0x95f8('0x33')],_0x35f144[_0x95f8('0x34')]);_0x8ab106[_0x95f8('0x37')]=_[_0x95f8('0x49')](_0x35f144['model'],qs[_0x95f8('0x38')](_0x2bc05e[_0x95f8('0x34')][_0x95f8('0x38')]));_0x8ab106[_0x95f8('0x37')]=_0x8ab106['attributes'][_0x95f8('0x4a')]?_0x8ab106[_0x95f8('0x37')]:_0x35f144[_0x95f8('0x33')];if(_0x2bc05e[_0x95f8('0x34')]['includeAll']){_0x8ab106[_0x95f8('0x43')]=[{'all':!![]}];}_0x8ab106=_[_0x95f8('0x40')]({},_0x8ab106,_0x2bc05e[_0x95f8('0x41')]);return db['FreshsalesField'][_0x95f8('0x4b')](_0x8ab106)[_0x95f8('0x27')](handleEntityNotFound(_0x59002a,null))[_0x95f8('0x27')](respondWithResult(_0x59002a,null))[_0x95f8('0x4c')](handleError(_0x59002a,null));};exports['create']=function(_0x51ad3a,_0x2efd7f){return db[_0x95f8('0x30')][_0x95f8('0x4d')](_0x51ad3a[_0x95f8('0x4e')],{})[_0x95f8('0x27')](respondWithResult(_0x2efd7f,0xc9))[_0x95f8('0x4c')](handleError(_0x2efd7f,null));};exports[_0x95f8('0x26')]=function(_0x315199,_0x11810d){if(_0x315199['body']['id']){delete _0x315199[_0x95f8('0x4e')]['id'];}return db[_0x95f8('0x30')][_0x95f8('0x4b')]({'where':{'id':_0x315199[_0x95f8('0x47')]['id']}})[_0x95f8('0x27')](handleEntityNotFound(_0x11810d,null))[_0x95f8('0x27')](saveUpdates(_0x315199[_0x95f8('0x4e')],null))[_0x95f8('0x27')](respondWithResult(_0x11810d,null))[_0x95f8('0x4c')](handleError(_0x11810d,null));};exports[_0x95f8('0x28')]=function(_0x22c693,_0x453003){return db['FreshsalesField'][_0x95f8('0x4b')]({'where':{'id':_0x22c693[_0x95f8('0x47')]['id']}})['then'](handleEntityNotFound(_0x453003,null))[_0x95f8('0x27')](removeEntity(_0x453003,null))[_0x95f8('0x4c')](handleError(_0x453003,null));};
\ No newline at end of file
+var _0xdab6=['map','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','pick','filter','where','merge','includeAll','findAll','catch','show','params','rawAttributes','length','create','body','find','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','fs-extra','lodash','crypto','desk.js','querystring','../../components/auth/service','../../config/logger','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','end','status','json','offset','limit','count','apply','save','update','destroy','then','error','stack','name','index','FreshsalesField','fieldName','type','model'];(function(_0x41b5c9,_0x5e0bbb){var _0x359fb3=function(_0x2baeb){while(--_0x2baeb){_0x41b5c9['push'](_0x41b5c9['shift']());}};_0x359fb3(++_0x5e0bbb);}(_0xdab6,0x1d8));var _0x6dab=function(_0x50174f,_0xc095c1){_0x50174f=_0x50174f-0x0;var _0x352da3=_0xdab6[_0x50174f];return _0x352da3;};'use strict';var emlformat=require(_0x6dab('0x0'));var rimraf=require(_0x6dab('0x1'));var zipdir=require(_0x6dab('0x2'));var jsonpatch=require(_0x6dab('0x3'));var rp=require(_0x6dab('0x4'));var moment=require('moment');var BPromise=require(_0x6dab('0x5'));var Mustache=require(_0x6dab('0x6'));var util=require(_0x6dab('0x7'));var path=require(_0x6dab('0x8'));var sox=require('sox');var csv=require(_0x6dab('0x9'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x6dab('0xa'));var _=require(_0x6dab('0xb'));var squel=require('squel');var crypto=require(_0x6dab('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x6dab('0xd'));var toCsv=require(_0x6dab('0x9'));var querystring=require(_0x6dab('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x6dab('0xf'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require('../../config/license/hardware');var logger=require(_0x6dab('0x10'))('api');var utils=require(_0x6dab('0x11'));var config=require('../../config/environment');var licenseUtil=require(_0x6dab('0x12'));var db=require(_0x6dab('0x13'))['db'];function respondWithStatusCode(_0x343acb,_0xc5ba4f){_0xc5ba4f=_0xc5ba4f||0xcc;return function(_0x462564){if(_0x462564){return _0x343acb[_0x6dab('0x14')](_0xc5ba4f);}return _0x343acb['status'](_0xc5ba4f)[_0x6dab('0x15')]();};}function respondWithResult(_0x48cbb9,_0x1751e5){_0x1751e5=_0x1751e5||0xc8;return function(_0x1c6c32){if(_0x1c6c32){return _0x48cbb9[_0x6dab('0x16')](_0x1751e5)[_0x6dab('0x17')](_0x1c6c32);}};}function respondWithFilteredResult(_0x470c13,_0x158dad){return function(_0x3b32e5){if(_0x3b32e5){var _0x34692f=typeof _0x158dad[_0x6dab('0x18')]==='undefined'&&typeof _0x158dad[_0x6dab('0x19')]==='undefined';var _0x3da9ad=_0x3b32e5[_0x6dab('0x1a')];var _0x3d3e87=_0x34692f?0x0:_0x158dad[_0x6dab('0x18')];var _0x58dfec=_0x34692f?_0x3b32e5[_0x6dab('0x1a')]:_0x158dad[_0x6dab('0x18')]+_0x158dad['limit'];var _0x1be5a6;if(_0x58dfec>=_0x3da9ad){_0x58dfec=_0x3da9ad;_0x1be5a6=0xc8;}else{_0x1be5a6=0xce;}_0x470c13[_0x6dab('0x16')](_0x1be5a6);return _0x470c13['set']('Content-Range',_0x3d3e87+'-'+_0x58dfec+'/'+_0x3da9ad)[_0x6dab('0x17')](_0x3b32e5);}return null;};}function patchUpdates(_0x57adac){return function(_0x454046){try{jsonpatch[_0x6dab('0x1b')](_0x454046,_0x57adac,!![]);}catch(_0x1753e8){return BPromise['reject'](_0x1753e8);}return _0x454046[_0x6dab('0x1c')]();};}function saveUpdates(_0x2e470e,_0x48debe){return function(_0x3a9944){if(_0x3a9944){return _0x3a9944[_0x6dab('0x1d')](_0x2e470e)['then'](function(_0x1a6995){return _0x1a6995;});}return null;};}function removeEntity(_0x3b8d08,_0x12d105){return function(_0x2dfdd5){if(_0x2dfdd5){return _0x2dfdd5[_0x6dab('0x1e')]()[_0x6dab('0x1f')](function(){_0x3b8d08[_0x6dab('0x16')](0xcc)[_0x6dab('0x15')]();});}};}function handleEntityNotFound(_0x55232f,_0x589351){return function(_0xced469){if(!_0xced469){_0x55232f[_0x6dab('0x14')](0x194);}return _0xced469;};}function handleError(_0x4bd580,_0x4767db){_0x4767db=_0x4767db||0x1f4;return function(_0x216914){logger[_0x6dab('0x20')](_0x216914[_0x6dab('0x21')]);if(_0x216914[_0x6dab('0x22')]){delete _0x216914[_0x6dab('0x22')];}_0x4bd580[_0x6dab('0x16')](_0x4767db)['send'](_0x216914);};}exports[_0x6dab('0x23')]=function(_0x527e90,_0x2988c7){var _0x14c19e={},_0x156d83={},_0x3e5d72={'count':0x0,'rows':[]};var _0x10f842=_['map'](db[_0x6dab('0x24')]['rawAttributes'],function(_0x4f8251){return{'name':_0x4f8251[_0x6dab('0x25')],'type':_0x4f8251[_0x6dab('0x26')]['key']};});_0x156d83[_0x6dab('0x27')]=_[_0x6dab('0x28')](_0x10f842,_0x6dab('0x22'));_0x156d83['query']=_[_0x6dab('0x29')](_0x527e90[_0x6dab('0x2a')]);_0x156d83[_0x6dab('0x2b')]=_[_0x6dab('0x2c')](_0x156d83['model'],_0x156d83['query']);_0x14c19e[_0x6dab('0x2d')]=_['intersection'](_0x156d83[_0x6dab('0x27')],qs['fields'](_0x527e90['query'][_0x6dab('0x2e')]));_0x14c19e['attributes']=_0x14c19e[_0x6dab('0x2d')]['length']?_0x14c19e[_0x6dab('0x2d')]:_0x156d83[_0x6dab('0x27')];if(!_0x527e90[_0x6dab('0x2a')][_0x6dab('0x2f')]('nolimit')){_0x14c19e[_0x6dab('0x19')]=qs[_0x6dab('0x19')](_0x527e90['query'][_0x6dab('0x19')]);_0x14c19e[_0x6dab('0x18')]=qs[_0x6dab('0x18')](_0x527e90[_0x6dab('0x2a')][_0x6dab('0x18')]);}_0x14c19e[_0x6dab('0x30')]=qs[_0x6dab('0x31')](_0x527e90[_0x6dab('0x2a')]['sort']);_0x14c19e['where']=qs[_0x6dab('0x2b')](_[_0x6dab('0x32')](_0x527e90[_0x6dab('0x2a')],_0x156d83[_0x6dab('0x2b')]),_0x10f842);if(_0x527e90[_0x6dab('0x2a')][_0x6dab('0x33')]){_0x14c19e[_0x6dab('0x34')]=_[_0x6dab('0x35')](_0x14c19e[_0x6dab('0x34')],{'$or':_[_0x6dab('0x28')](_0x10f842,function(_0x2d7570){if(_0x2d7570[_0x6dab('0x26')]!=='VIRTUAL'){var _0x2ff318={};_0x2ff318[_0x2d7570['name']]={'$like':'%'+_0x527e90['query']['filter']+'%'};return _0x2ff318;}})});}_0x14c19e=_['merge']({},_0x14c19e,_0x527e90['options']);var _0x1d577e={'where':_0x14c19e['where']};return db[_0x6dab('0x24')]['count'](_0x1d577e)[_0x6dab('0x1f')](function(_0x3a4c91){_0x3e5d72[_0x6dab('0x1a')]=_0x3a4c91;if(_0x527e90[_0x6dab('0x2a')][_0x6dab('0x36')]){_0x14c19e['include']=[{'all':!![]}];}return db['FreshsalesField'][_0x6dab('0x37')](_0x14c19e);})[_0x6dab('0x1f')](function(_0x451daa){_0x3e5d72['rows']=_0x451daa;return _0x3e5d72;})[_0x6dab('0x1f')](respondWithFilteredResult(_0x2988c7,_0x14c19e))[_0x6dab('0x38')](handleError(_0x2988c7,null));};exports[_0x6dab('0x39')]=function(_0x5e4764,_0x1d0387){var _0x18b2ed={'raw':!![],'where':{'id':_0x5e4764[_0x6dab('0x3a')]['id']}},_0x2fbd75={};_0x2fbd75[_0x6dab('0x27')]=_[_0x6dab('0x29')](db[_0x6dab('0x24')][_0x6dab('0x3b')]);_0x2fbd75[_0x6dab('0x2a')]=_['keys'](_0x5e4764[_0x6dab('0x2a')]);_0x2fbd75[_0x6dab('0x2b')]=_['intersection'](_0x2fbd75[_0x6dab('0x27')],_0x2fbd75['query']);_0x18b2ed[_0x6dab('0x2d')]=_[_0x6dab('0x2c')](_0x2fbd75[_0x6dab('0x27')],qs[_0x6dab('0x2e')](_0x5e4764[_0x6dab('0x2a')][_0x6dab('0x2e')]));_0x18b2ed[_0x6dab('0x2d')]=_0x18b2ed['attributes'][_0x6dab('0x3c')]?_0x18b2ed[_0x6dab('0x2d')]:_0x2fbd75['model'];if(_0x5e4764[_0x6dab('0x2a')][_0x6dab('0x36')]){_0x18b2ed['include']=[{'all':!![]}];}_0x18b2ed=_['merge']({},_0x18b2ed,_0x5e4764['options']);return db[_0x6dab('0x24')]['find'](_0x18b2ed)['then'](handleEntityNotFound(_0x1d0387,null))[_0x6dab('0x1f')](respondWithResult(_0x1d0387,null))[_0x6dab('0x38')](handleError(_0x1d0387,null));};exports['create']=function(_0x47556c,_0x2f3f74){return db[_0x6dab('0x24')][_0x6dab('0x3d')](_0x47556c[_0x6dab('0x3e')],{})[_0x6dab('0x1f')](respondWithResult(_0x2f3f74,0xc9))[_0x6dab('0x38')](handleError(_0x2f3f74,null));};exports[_0x6dab('0x1d')]=function(_0x322e43,_0x52ee4e){if(_0x322e43[_0x6dab('0x3e')]['id']){delete _0x322e43[_0x6dab('0x3e')]['id'];}return db['FreshsalesField'][_0x6dab('0x3f')]({'where':{'id':_0x322e43[_0x6dab('0x3a')]['id']}})[_0x6dab('0x1f')](handleEntityNotFound(_0x52ee4e,null))[_0x6dab('0x1f')](saveUpdates(_0x322e43[_0x6dab('0x3e')],null))[_0x6dab('0x1f')](respondWithResult(_0x52ee4e,null))[_0x6dab('0x38')](handleError(_0x52ee4e,null));};exports[_0x6dab('0x1e')]=function(_0x11af50,_0x1a46b7){return db[_0x6dab('0x24')][_0x6dab('0x3f')]({'where':{'id':_0x11af50[_0x6dab('0x3a')]['id']}})[_0x6dab('0x1f')](handleEntityNotFound(_0x1a46b7,null))[_0x6dab('0x1f')](removeEntity(_0x1a46b7,null))[_0x6dab('0x38')](handleError(_0x1a46b7,null));};
\ No newline at end of file