Built motion from commit c738b9ac.|2.6.25
[motion2.git] / server / api / intSalesforceField / intSalesforceField.controller.js
index 2c23964..6ee3d4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf82b=['rawAttributes','include','find','create','body','update','rimraf','zip-dir','fast-json-patch','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','apply','reject','save','then','error','stack','index','map','fieldName','type','key','model','name','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','filter','merge','options','SalesforceField','includeAll','findAll','rows','catch','show','params'];(function(_0x10004e,_0xd701e6){var _0x5af990=function(_0x4bab6a){while(--_0x4bab6a){_0x10004e['push'](_0x10004e['shift']());}};_0x5af990(++_0xd701e6);}(_0xf82b,0x98));var _0xbf82=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf82b[_0x14add3];return _0x4a174f;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0xbf82('0x0'));var zipdir=require(_0xbf82('0x1'));var jsonpatch=require(_0xbf82('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xbf82('0x3'));var util=require(_0xbf82('0x4'));var path=require(_0xbf82('0x5'));var sox=require(_0xbf82('0x6'));var csv=require(_0xbf82('0x7'));var ejs=require(_0xbf82('0x8'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require(_0xbf82('0x9'));var squel=require(_0xbf82('0xa'));var crypto=require('crypto');var jsforce=require(_0xbf82('0xb'));var deskjs=require(_0xbf82('0xc'));var toCsv=require('to-csv');var querystring=require(_0xbf82('0xd'));var Papa=require(_0xbf82('0xe'));var Redis=require(_0xbf82('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xbf82('0x10'));var as=require(_0xbf82('0x11'));var hardwareService=require(_0xbf82('0x12'));var logger=require(_0xbf82('0x13'))(_0xbf82('0x14'));var utils=require(_0xbf82('0x15'));var config=require(_0xbf82('0x16'));var licenseUtil=require('../../config/license/util');var db=require(_0xbf82('0x17'))['db'];function respondWithStatusCode(_0x691652,_0xa73212){_0xa73212=_0xa73212||0xcc;return function(_0x45e36a){if(_0x45e36a){return _0x691652[_0xbf82('0x18')](_0xa73212);}return _0x691652[_0xbf82('0x19')](_0xa73212)[_0xbf82('0x1a')]();};}function respondWithResult(_0x1ad76b,_0xa4f13d){_0xa4f13d=_0xa4f13d||0xc8;return function(_0x415650){if(_0x415650){return _0x1ad76b['status'](_0xa4f13d)[_0xbf82('0x1b')](_0x415650);}};}function respondWithFilteredResult(_0xbc6b50,_0x50040c){return function(_0x381a85){if(_0x381a85){var _0x3b57ef=typeof _0x50040c[_0xbf82('0x1c')]===_0xbf82('0x1d')&&typeof _0x50040c[_0xbf82('0x1e')]==='undefined';var _0x25cafd=_0x381a85['count'];var _0x370000=_0x3b57ef?0x0:_0x50040c['offset'];var _0x2d471e=_0x3b57ef?_0x381a85[_0xbf82('0x1f')]:_0x50040c['offset']+_0x50040c[_0xbf82('0x1e')];var _0x2bb759;if(_0x2d471e>=_0x25cafd){_0x2d471e=_0x25cafd;_0x2bb759=0xc8;}else{_0x2bb759=0xce;}_0xbc6b50['status'](_0x2bb759);return _0xbc6b50['set']('Content-Range',_0x370000+'-'+_0x2d471e+'/'+_0x25cafd)[_0xbf82('0x1b')](_0x381a85);}return null;};}function patchUpdates(_0x1f71a9){return function(_0x583a52){try{jsonpatch[_0xbf82('0x20')](_0x583a52,_0x1f71a9,!![]);}catch(_0xe36890){return BPromise[_0xbf82('0x21')](_0xe36890);}return _0x583a52[_0xbf82('0x22')]();};}function saveUpdates(_0x3fb331,_0x380379){return function(_0x1766bf){if(_0x1766bf){return _0x1766bf['update'](_0x3fb331)['then'](function(_0x316ca2){return _0x316ca2;});}return null;};}function removeEntity(_0x378776,_0x4d6179){return function(_0xf5b08f){if(_0xf5b08f){return _0xf5b08f['destroy']()[_0xbf82('0x23')](function(){_0x378776[_0xbf82('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2d6375,_0x15c9f5){return function(_0x4051ce){if(!_0x4051ce){_0x2d6375[_0xbf82('0x18')](0x194);}return _0x4051ce;};}function handleError(_0x349f4d,_0x393867){_0x393867=_0x393867||0x1f4;return function(_0x14539b){logger[_0xbf82('0x24')](_0x14539b[_0xbf82('0x25')]);if(_0x14539b['name']){delete _0x14539b['name'];}_0x349f4d[_0xbf82('0x19')](_0x393867)['send'](_0x14539b);};}exports[_0xbf82('0x26')]=function(_0x48c093,_0x16c09c){var _0x4189a8={},_0x2181ee={},_0x422a67={'count':0x0,'rows':[]};var _0x3ff3fe=_[_0xbf82('0x27')](db['SalesforceField']['rawAttributes'],function(_0x252fa1){return{'name':_0x252fa1[_0xbf82('0x28')],'type':_0x252fa1[_0xbf82('0x29')][_0xbf82('0x2a')]};});_0x2181ee[_0xbf82('0x2b')]=_['map'](_0x3ff3fe,_0xbf82('0x2c'));_0x2181ee[_0xbf82('0x2d')]=_[_0xbf82('0x2e')](_0x48c093[_0xbf82('0x2d')]);_0x2181ee[_0xbf82('0x2f')]=_[_0xbf82('0x30')](_0x2181ee[_0xbf82('0x2b')],_0x2181ee[_0xbf82('0x2d')]);_0x4189a8[_0xbf82('0x31')]=_['intersection'](_0x2181ee['model'],qs[_0xbf82('0x32')](_0x48c093['query'][_0xbf82('0x32')]));_0x4189a8['attributes']=_0x4189a8[_0xbf82('0x31')][_0xbf82('0x33')]?_0x4189a8[_0xbf82('0x31')]:_0x2181ee[_0xbf82('0x2b')];if(!_0x48c093[_0xbf82('0x2d')][_0xbf82('0x34')]('nolimit')){_0x4189a8[_0xbf82('0x1e')]=qs[_0xbf82('0x1e')](_0x48c093[_0xbf82('0x2d')]['limit']);_0x4189a8[_0xbf82('0x1c')]=qs[_0xbf82('0x1c')](_0x48c093[_0xbf82('0x2d')][_0xbf82('0x1c')]);}_0x4189a8[_0xbf82('0x35')]=qs[_0xbf82('0x36')](_0x48c093[_0xbf82('0x2d')][_0xbf82('0x36')]);_0x4189a8[_0xbf82('0x37')]=qs[_0xbf82('0x2f')](_[_0xbf82('0x38')](_0x48c093[_0xbf82('0x2d')],_0x2181ee['filters']),_0x3ff3fe);if(_0x48c093[_0xbf82('0x2d')][_0xbf82('0x39')]){_0x4189a8[_0xbf82('0x37')]=_[_0xbf82('0x3a')](_0x4189a8[_0xbf82('0x37')],{'$or':_['map'](_0x3ff3fe,function(_0x48f5f7){if(_0x48f5f7[_0xbf82('0x29')]!=='VIRTUAL'){var _0x2c6975={};_0x2c6975[_0x48f5f7[_0xbf82('0x2c')]]={'$like':'%'+_0x48c093[_0xbf82('0x2d')][_0xbf82('0x39')]+'%'};return _0x2c6975;}})});}_0x4189a8=_[_0xbf82('0x3a')]({},_0x4189a8,_0x48c093[_0xbf82('0x3b')]);var _0x289f9f={'where':_0x4189a8['where']};return db[_0xbf82('0x3c')][_0xbf82('0x1f')](_0x289f9f)[_0xbf82('0x23')](function(_0x57b228){_0x422a67[_0xbf82('0x1f')]=_0x57b228;if(_0x48c093[_0xbf82('0x2d')][_0xbf82('0x3d')]){_0x4189a8['include']=[{'all':!![]}];}return db[_0xbf82('0x3c')][_0xbf82('0x3e')](_0x4189a8);})[_0xbf82('0x23')](function(_0x235d76){_0x422a67[_0xbf82('0x3f')]=_0x235d76;return _0x422a67;})['then'](respondWithFilteredResult(_0x16c09c,_0x4189a8))[_0xbf82('0x40')](handleError(_0x16c09c,null));};exports[_0xbf82('0x41')]=function(_0x395747,_0xf46220){var _0x5481dd={'raw':!![],'where':{'id':_0x395747[_0xbf82('0x42')]['id']}},_0x317062={};_0x317062[_0xbf82('0x2b')]=_['keys'](db[_0xbf82('0x3c')][_0xbf82('0x43')]);_0x317062[_0xbf82('0x2d')]=_['keys'](_0x395747[_0xbf82('0x2d')]);_0x317062[_0xbf82('0x2f')]=_[_0xbf82('0x30')](_0x317062['model'],_0x317062[_0xbf82('0x2d')]);_0x5481dd['attributes']=_[_0xbf82('0x30')](_0x317062['model'],qs[_0xbf82('0x32')](_0x395747[_0xbf82('0x2d')][_0xbf82('0x32')]));_0x5481dd[_0xbf82('0x31')]=_0x5481dd[_0xbf82('0x31')]['length']?_0x5481dd[_0xbf82('0x31')]:_0x317062[_0xbf82('0x2b')];if(_0x395747[_0xbf82('0x2d')]['includeAll']){_0x5481dd[_0xbf82('0x44')]=[{'all':!![]}];}_0x5481dd=_[_0xbf82('0x3a')]({},_0x5481dd,_0x395747[_0xbf82('0x3b')]);return db[_0xbf82('0x3c')][_0xbf82('0x45')](_0x5481dd)[_0xbf82('0x23')](handleEntityNotFound(_0xf46220,null))[_0xbf82('0x23')](respondWithResult(_0xf46220,null))[_0xbf82('0x40')](handleError(_0xf46220,null));};exports[_0xbf82('0x46')]=function(_0x3d20e7,_0x447b52){return db[_0xbf82('0x3c')][_0xbf82('0x46')](_0x3d20e7[_0xbf82('0x47')],{})[_0xbf82('0x23')](respondWithResult(_0x447b52,0xc9))[_0xbf82('0x40')](handleError(_0x447b52,null));};exports[_0xbf82('0x48')]=function(_0xc2f049,_0xdad4f0){if(_0xc2f049['body']['id']){delete _0xc2f049['body']['id'];}return db['SalesforceField'][_0xbf82('0x45')]({'where':{'id':_0xc2f049[_0xbf82('0x42')]['id']}})[_0xbf82('0x23')](handleEntityNotFound(_0xdad4f0,null))[_0xbf82('0x23')](saveUpdates(_0xc2f049[_0xbf82('0x47')],null))['then'](respondWithResult(_0xdad4f0,null))[_0xbf82('0x40')](handleError(_0xdad4f0,null));};exports['destroy']=function(_0x3c46f5,_0x20c934){return db['SalesforceField'][_0xbf82('0x45')]({'where':{'id':_0x3c46f5['params']['id']}})[_0xbf82('0x23')](handleEntityNotFound(_0x20c934,null))['then'](removeEntity(_0x20c934,null))[_0xbf82('0x40')](handleError(_0x20c934,null));};
\ No newline at end of file
+var _0x65ad=['create','body','find','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','fs-extra','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/license/util','../../mysqldb','status','end','json','limit','undefined','count','offset','set','Content-Range','apply','reject','update','destroy','sendStatus','error','stack','name','send','index','map','SalesforceField','rawAttributes','fieldName','key','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','where','filter','merge','type','VIRTUAL','options','then','includeAll','include','rows','catch','params'];(function(_0x1e7b16,_0x4607a1){var _0x37fadc=function(_0x1fc9ce){while(--_0x1fc9ce){_0x1e7b16['push'](_0x1e7b16['shift']());}};_0x37fadc(++_0x4607a1);}(_0x65ad,0x1cb));var _0xd65a=function(_0x6aea85,_0x41182d){_0x6aea85=_0x6aea85-0x0;var _0x180bf7=_0x65ad[_0x6aea85];return _0x180bf7;};'use strict';var emlformat=require(_0xd65a('0x0'));var rimraf=require(_0xd65a('0x1'));var zipdir=require(_0xd65a('0x2'));var jsonpatch=require(_0xd65a('0x3'));var rp=require(_0xd65a('0x4'));var moment=require(_0xd65a('0x5'));var BPromise=require(_0xd65a('0x6'));var Mustache=require(_0xd65a('0x7'));var util=require('util');var path=require(_0xd65a('0x8'));var sox=require(_0xd65a('0x9'));var csv=require(_0xd65a('0xa'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xd65a('0xb'));var _=require(_0xd65a('0xc'));var squel=require(_0xd65a('0xd'));var crypto=require('crypto');var jsforce=require(_0xd65a('0xe'));var deskjs=require(_0xd65a('0xf'));var toCsv=require(_0xd65a('0xa'));var querystring=require(_0xd65a('0x10'));var Papa=require(_0xd65a('0x11'));var Redis=require(_0xd65a('0x12'));var authService=require(_0xd65a('0x13'));var qs=require('../../components/parsers/qs');var as=require(_0xd65a('0x14'));var hardwareService=require(_0xd65a('0x15'));var logger=require(_0xd65a('0x16'))(_0xd65a('0x17'));var utils=require('../../config/utils');var config=require('../../config/environment');var licenseUtil=require(_0xd65a('0x18'));var db=require(_0xd65a('0x19'))['db'];function respondWithStatusCode(_0x37114f,_0x195fb0){_0x195fb0=_0x195fb0||0xcc;return function(_0x1e2324){if(_0x1e2324){return _0x37114f['sendStatus'](_0x195fb0);}return _0x37114f[_0xd65a('0x1a')](_0x195fb0)[_0xd65a('0x1b')]();};}function respondWithResult(_0x5455d4,_0x7cfa57){_0x7cfa57=_0x7cfa57||0xc8;return function(_0xae905){if(_0xae905){return _0x5455d4[_0xd65a('0x1a')](_0x7cfa57)[_0xd65a('0x1c')](_0xae905);}};}function respondWithFilteredResult(_0x4992d1,_0x111bf1){return function(_0x119781){if(_0x119781){var _0x34bcfb=typeof _0x111bf1['offset']==='undefined'&&typeof _0x111bf1[_0xd65a('0x1d')]===_0xd65a('0x1e');var _0x12eae7=_0x119781[_0xd65a('0x1f')];var _0x3a7c75=_0x34bcfb?0x0:_0x111bf1['offset'];var _0x36223e=_0x34bcfb?_0x119781[_0xd65a('0x1f')]:_0x111bf1[_0xd65a('0x20')]+_0x111bf1[_0xd65a('0x1d')];var _0x3840da;if(_0x36223e>=_0x12eae7){_0x36223e=_0x12eae7;_0x3840da=0xc8;}else{_0x3840da=0xce;}_0x4992d1[_0xd65a('0x1a')](_0x3840da);return _0x4992d1[_0xd65a('0x21')](_0xd65a('0x22'),_0x3a7c75+'-'+_0x36223e+'/'+_0x12eae7)[_0xd65a('0x1c')](_0x119781);}return null;};}function patchUpdates(_0x48889c){return function(_0x33d108){try{jsonpatch[_0xd65a('0x23')](_0x33d108,_0x48889c,!![]);}catch(_0xcec18d){return BPromise[_0xd65a('0x24')](_0xcec18d);}return _0x33d108['save']();};}function saveUpdates(_0x23b94d,_0x36a3b7){return function(_0x30a2bc){if(_0x30a2bc){return _0x30a2bc[_0xd65a('0x25')](_0x23b94d)['then'](function(_0x48a673){return _0x48a673;});}return null;};}function removeEntity(_0x49c62a,_0x4d0329){return function(_0x5d015b){if(_0x5d015b){return _0x5d015b[_0xd65a('0x26')]()['then'](function(){_0x49c62a[_0xd65a('0x1a')](0xcc)[_0xd65a('0x1b')]();});}};}function handleEntityNotFound(_0x3de57f,_0x36890c){return function(_0x242811){if(!_0x242811){_0x3de57f[_0xd65a('0x27')](0x194);}return _0x242811;};}function handleError(_0x2f4e30,_0x473f72){_0x473f72=_0x473f72||0x1f4;return function(_0x4c667f){logger[_0xd65a('0x28')](_0x4c667f[_0xd65a('0x29')]);if(_0x4c667f[_0xd65a('0x2a')]){delete _0x4c667f[_0xd65a('0x2a')];}_0x2f4e30[_0xd65a('0x1a')](_0x473f72)[_0xd65a('0x2b')](_0x4c667f);};}exports[_0xd65a('0x2c')]=function(_0x44f479,_0x20d34d){var _0x563919={},_0x494540={},_0x2f0abc={'count':0x0,'rows':[]};var _0x336f05=_[_0xd65a('0x2d')](db[_0xd65a('0x2e')][_0xd65a('0x2f')],function(_0x2390db){return{'name':_0x2390db[_0xd65a('0x30')],'type':_0x2390db['type'][_0xd65a('0x31')]};});_0x494540[_0xd65a('0x32')]=_[_0xd65a('0x2d')](_0x336f05,_0xd65a('0x2a'));_0x494540[_0xd65a('0x33')]=_[_0xd65a('0x34')](_0x44f479[_0xd65a('0x33')]);_0x494540[_0xd65a('0x35')]=_[_0xd65a('0x36')](_0x494540[_0xd65a('0x32')],_0x494540['query']);_0x563919['attributes']=_[_0xd65a('0x36')](_0x494540['model'],qs[_0xd65a('0x37')](_0x44f479['query']['fields']));_0x563919[_0xd65a('0x38')]=_0x563919[_0xd65a('0x38')][_0xd65a('0x39')]?_0x563919[_0xd65a('0x38')]:_0x494540[_0xd65a('0x32')];if(!_0x44f479[_0xd65a('0x33')][_0xd65a('0x3a')](_0xd65a('0x3b'))){_0x563919[_0xd65a('0x1d')]=qs[_0xd65a('0x1d')](_0x44f479[_0xd65a('0x33')][_0xd65a('0x1d')]);_0x563919[_0xd65a('0x20')]=qs['offset'](_0x44f479['query'][_0xd65a('0x20')]);}_0x563919[_0xd65a('0x3c')]=qs['sort'](_0x44f479[_0xd65a('0x33')]['sort']);_0x563919[_0xd65a('0x3d')]=qs[_0xd65a('0x35')](_['pick'](_0x44f479[_0xd65a('0x33')],_0x494540['filters']),_0x336f05);if(_0x44f479[_0xd65a('0x33')][_0xd65a('0x3e')]){_0x563919[_0xd65a('0x3d')]=_[_0xd65a('0x3f')](_0x563919[_0xd65a('0x3d')],{'$or':_['map'](_0x336f05,function(_0x46d474){if(_0x46d474[_0xd65a('0x40')]!==_0xd65a('0x41')){var _0x3bef70={};_0x3bef70[_0x46d474[_0xd65a('0x2a')]]={'$like':'%'+_0x44f479[_0xd65a('0x33')][_0xd65a('0x3e')]+'%'};return _0x3bef70;}})});}_0x563919=_[_0xd65a('0x3f')]({},_0x563919,_0x44f479[_0xd65a('0x42')]);var _0x4abecc={'where':_0x563919['where']};return db[_0xd65a('0x2e')][_0xd65a('0x1f')](_0x4abecc)[_0xd65a('0x43')](function(_0x24d4d8){_0x2f0abc['count']=_0x24d4d8;if(_0x44f479[_0xd65a('0x33')][_0xd65a('0x44')]){_0x563919[_0xd65a('0x45')]=[{'all':!![]}];}return db[_0xd65a('0x2e')]['findAll'](_0x563919);})[_0xd65a('0x43')](function(_0x1b3c30){_0x2f0abc[_0xd65a('0x46')]=_0x1b3c30;return _0x2f0abc;})['then'](respondWithFilteredResult(_0x20d34d,_0x563919))[_0xd65a('0x47')](handleError(_0x20d34d,null));};exports['show']=function(_0x3fa5b6,_0x1fd5bc){var _0x5445f9={'raw':!![],'where':{'id':_0x3fa5b6[_0xd65a('0x48')]['id']}},_0x55c50d={};_0x55c50d[_0xd65a('0x32')]=_['keys'](db[_0xd65a('0x2e')][_0xd65a('0x2f')]);_0x55c50d[_0xd65a('0x33')]=_[_0xd65a('0x34')](_0x3fa5b6[_0xd65a('0x33')]);_0x55c50d[_0xd65a('0x35')]=_[_0xd65a('0x36')](_0x55c50d[_0xd65a('0x32')],_0x55c50d[_0xd65a('0x33')]);_0x5445f9[_0xd65a('0x38')]=_[_0xd65a('0x36')](_0x55c50d[_0xd65a('0x32')],qs[_0xd65a('0x37')](_0x3fa5b6[_0xd65a('0x33')][_0xd65a('0x37')]));_0x5445f9[_0xd65a('0x38')]=_0x5445f9[_0xd65a('0x38')]['length']?_0x5445f9[_0xd65a('0x38')]:_0x55c50d['model'];if(_0x3fa5b6[_0xd65a('0x33')][_0xd65a('0x44')]){_0x5445f9[_0xd65a('0x45')]=[{'all':!![]}];}_0x5445f9=_[_0xd65a('0x3f')]({},_0x5445f9,_0x3fa5b6[_0xd65a('0x42')]);return db['SalesforceField']['find'](_0x5445f9)[_0xd65a('0x43')](handleEntityNotFound(_0x1fd5bc,null))['then'](respondWithResult(_0x1fd5bc,null))[_0xd65a('0x47')](handleError(_0x1fd5bc,null));};exports[_0xd65a('0x49')]=function(_0x5e6a1f,_0x1a0946){return db[_0xd65a('0x2e')][_0xd65a('0x49')](_0x5e6a1f[_0xd65a('0x4a')],{})[_0xd65a('0x43')](respondWithResult(_0x1a0946,0xc9))[_0xd65a('0x47')](handleError(_0x1a0946,null));};exports[_0xd65a('0x25')]=function(_0x5d9691,_0x26a891){if(_0x5d9691[_0xd65a('0x4a')]['id']){delete _0x5d9691['body']['id'];}return db[_0xd65a('0x2e')][_0xd65a('0x4b')]({'where':{'id':_0x5d9691['params']['id']}})[_0xd65a('0x43')](handleEntityNotFound(_0x26a891,null))[_0xd65a('0x43')](saveUpdates(_0x5d9691[_0xd65a('0x4a')],null))[_0xd65a('0x43')](respondWithResult(_0x26a891,null))[_0xd65a('0x47')](handleError(_0x26a891,null));};exports['destroy']=function(_0x2500f7,_0x15acb7){return db['SalesforceField'][_0xd65a('0x4b')]({'where':{'id':_0x2500f7[_0xd65a('0x48')]['id']}})[_0xd65a('0x43')](handleEntityNotFound(_0x15acb7,null))['then'](removeEntity(_0x15acb7,null))[_0xd65a('0x47')](handleError(_0x15acb7,null));};
\ No newline at end of file