Built motion from commit (unavailable).|2.0.72
[motion2.git] / server / api / memberReport / memberReport.controller.js
index 63405c5..e74daba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc00d=['params','rawAttributes','intersection','length','find','create','body','describe','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','jsforce','querystring','../../components/parsers/qs','../../config/logger','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','then','destroy','stack','name','send','index','MemberReport','keys','query','dateStart','dateEnd','filters','model','attributes','fields','nolimit','order','sort','pick','add','day','merge','filter','where','options','includeAll','include','findAll','rows','catch','show'];(function(_0x45e6e1,_0x171507){var _0x33dd3c=function(_0x12e23d){while(--_0x12e23d){_0x45e6e1['push'](_0x45e6e1['shift']());}};_0x33dd3c(++_0x171507);}(_0xc00d,0xce));var _0xdc00=function(_0x213957,_0x2324a){_0x213957=_0x213957-0x0;var _0x61b729=_0xc00d[_0x213957];return _0x61b729;};'use strict';var jsonpatch=require(_0xdc00('0x0'));var rp=require('request-promise');var moment=require(_0xdc00('0x1'));var BPromise=require(_0xdc00('0x2'));var Mustache=require(_0xdc00('0x3'));var util=require(_0xdc00('0x4'));var path=require(_0xdc00('0x5'));var sox=require(_0xdc00('0x6'));var csv=require(_0xdc00('0x7'));var ejs=require(_0xdc00('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xdc00('0x9'));var crypto=require('crypto');var jsforce=require(_0xdc00('0xa'));var deskjs=require('desk.js');var toCsv=require(_0xdc00('0x7'));var querystring=require(_0xdc00('0xb'));var Papa=require('papaparse');var qs=require(_0xdc00('0xc'));var logger=require(_0xdc00('0xd'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xdc00('0xe'))['db'];function respondWithStatusCode(_0x522119,_0x3aa28f){_0x3aa28f=_0x3aa28f||0xcc;return function(_0x2fa041){if(_0x2fa041){return _0x522119[_0xdc00('0xf')](_0x3aa28f);}return _0x522119[_0xdc00('0x10')](_0x3aa28f)[_0xdc00('0x11')]();};}function respondWithResult(_0x57b458,_0x181d8d){_0x181d8d=_0x181d8d||0xc8;return function(_0x4816e2){if(_0x4816e2){return _0x57b458[_0xdc00('0x10')](_0x181d8d)[_0xdc00('0x12')](_0x4816e2);}};}function respondWithFilteredResult(_0x199059,_0x3639f6){return function(_0x3cc58c){if(_0x3cc58c){var _0x436298=_0x3cc58c[_0xdc00('0x13')],_0x24b89f=_0x3639f6['offset'],_0x54d7b5=_0x3639f6[_0xdc00('0x14')]+_0x3639f6[_0xdc00('0x15')],_0x2b8f03;if(_0x54d7b5>=_0x436298){_0x54d7b5=_0x436298;_0x2b8f03=0xc8;}else{_0x2b8f03=0xce;}_0x199059[_0xdc00('0x10')](_0x2b8f03);return _0x199059[_0xdc00('0x16')]('Content-Range',_0x24b89f+'-'+_0x54d7b5+'/'+_0x436298)['json'](_0x3cc58c);}return null;};}function patchUpdates(_0x5b4896){return function(_0x59b008){try{jsonpatch[_0xdc00('0x17')](_0x59b008,_0x5b4896,!![]);}catch(_0x21eb99){return BPromise[_0xdc00('0x18')](_0x21eb99);}return _0x59b008[_0xdc00('0x19')]();};}function saveUpdates(_0x14c795,_0x4a73c7){return function(_0x561f22){if(_0x561f22){return _0x561f22[_0xdc00('0x1a')](_0x14c795)[_0xdc00('0x1b')](function(_0x2ee29a){return _0x2ee29a;});}return null;};}function removeEntity(_0x5f09bb,_0x5b4c6f){return function(_0x3e9446){if(_0x3e9446){return _0x3e9446[_0xdc00('0x1c')]()[_0xdc00('0x1b')](function(){_0x5f09bb[_0xdc00('0x10')](0xcc)[_0xdc00('0x11')]();});}};}function handleEntityNotFound(_0x194c9a,_0x1c70be){return function(_0x27c998){if(!_0x27c998){_0x194c9a[_0xdc00('0xf')](0x194);}return _0x27c998;};}function handleError(_0x548926,_0x325a5e){_0x325a5e=_0x325a5e||0x1f4;return function(_0x459a4f){logger['error'](_0x459a4f[_0xdc00('0x1d')]);if(_0x459a4f[_0xdc00('0x1e')]){delete _0x459a4f['name'];}_0x548926[_0xdc00('0x10')](_0x325a5e)[_0xdc00('0x1f')](_0x459a4f);};}exports[_0xdc00('0x20')]=function(_0x2d4349,_0x3138d4){var _0x38f6ca={},_0x341933={},_0x47f97d={'count':0x0,'rows':[]};var _0x182c51=db[_0xdc00('0x21')]['rawAttributes'];_0x341933['model']=_[_0xdc00('0x22')](_0x182c51);var _0x408e16={'dateStart':_0x2d4349[_0xdc00('0x23')][_0xdc00('0x24')],'dateEnd':_0x2d4349['query'][_0xdc00('0x25')]};delete _0x2d4349[_0xdc00('0x23')]['dateStart'];delete _0x2d4349['query'][_0xdc00('0x25')];_0x341933[_0xdc00('0x23')]=_[_0xdc00('0x22')](_0x2d4349[_0xdc00('0x23')]);_0x341933[_0xdc00('0x26')]=_['intersection'](_0x341933[_0xdc00('0x27')],_0x341933['query']);_0x38f6ca[_0xdc00('0x28')]=_['intersection'](_0x341933['model'],qs['fields'](_0x2d4349[_0xdc00('0x23')][_0xdc00('0x29')]));_0x38f6ca[_0xdc00('0x28')]=_0x38f6ca[_0xdc00('0x28')]['length']?_0x38f6ca[_0xdc00('0x28')]:_0x341933[_0xdc00('0x27')];if(!_0x2d4349['query']['hasOwnProperty'](_0xdc00('0x2a'))){_0x38f6ca[_0xdc00('0x15')]=qs[_0xdc00('0x15')](_0x2d4349['query'][_0xdc00('0x15')]);_0x38f6ca[_0xdc00('0x14')]=qs[_0xdc00('0x14')](_0x2d4349[_0xdc00('0x23')][_0xdc00('0x14')]);}_0x38f6ca[_0xdc00('0x2b')]=qs['sort'](_0x2d4349[_0xdc00('0x23')][_0xdc00('0x2c')]);_0x38f6ca['where']=qs[_0xdc00('0x26')](_[_0xdc00('0x2d')](_0x2d4349[_0xdc00('0x23')],_0x341933['filters']));if(_0x408e16[_0xdc00('0x24')]){if(_0x408e16[_0xdc00('0x25')]){_0x408e16[_0xdc00('0x25')]=moment(_0x408e16[_0xdc00('0x25')])[_0xdc00('0x2e')](0x1,_0xdc00('0x2f'));}else{_0x408e16['dateEnd']=moment(_0x408e16[_0xdc00('0x24')])['add'](0x1,_0xdc00('0x2f'));}_[_0xdc00('0x30')](_0x38f6ca['where'],{'createdAt':{'$gte':_0x408e16[_0xdc00('0x24')],'$lte':_0x408e16[_0xdc00('0x25')]}});}if(_0x2d4349[_0xdc00('0x23')][_0xdc00('0x31')]){_0x38f6ca[_0xdc00('0x32')]=_[_0xdc00('0x30')](_0x38f6ca['where'],{'$or':_['map'](_0x38f6ca[_0xdc00('0x28')],function(_0x22b967){var _0x4f2744={};_0x4f2744[_0x22b967]={'$like':'%'+_0x2d4349[_0xdc00('0x23')][_0xdc00('0x31')]+'%'};return _0x4f2744;})});}_0x38f6ca=_['merge']({},_0x38f6ca,_0x2d4349[_0xdc00('0x33')]);var _0x1f50b8={'where':_0x38f6ca[_0xdc00('0x32')]};return db['MemberReport']['count'](_0x1f50b8)[_0xdc00('0x1b')](function(_0x398d06){_0x47f97d['count']=_0x398d06;if(_0x2d4349['query'][_0xdc00('0x34')]){_0x38f6ca[_0xdc00('0x35')]=[{'all':!![]}];}return db[_0xdc00('0x21')][_0xdc00('0x36')](_0x38f6ca);})['then'](function(_0x15d1e7){_0x47f97d[_0xdc00('0x37')]=_0x15d1e7;return _0x47f97d;})['then'](respondWithFilteredResult(_0x3138d4,_0x38f6ca))[_0xdc00('0x38')](handleError(_0x3138d4,null));};exports[_0xdc00('0x39')]=function(_0x5eb8de,_0x3749b3){var _0x22260c={'raw':!![],'where':{'id':_0x5eb8de[_0xdc00('0x3a')]['id']}},_0x1285c7={};_0x1285c7[_0xdc00('0x27')]=_['keys'](db[_0xdc00('0x21')][_0xdc00('0x3b')]);_0x1285c7[_0xdc00('0x23')]=_[_0xdc00('0x22')](_0x5eb8de[_0xdc00('0x23')]);_0x1285c7[_0xdc00('0x26')]=_['intersection'](_0x1285c7[_0xdc00('0x27')],_0x1285c7[_0xdc00('0x23')]);_0x22260c[_0xdc00('0x28')]=_[_0xdc00('0x3c')](_0x1285c7[_0xdc00('0x27')],qs[_0xdc00('0x29')](_0x5eb8de['query'][_0xdc00('0x29')]));_0x22260c[_0xdc00('0x28')]=_0x22260c[_0xdc00('0x28')][_0xdc00('0x3d')]?_0x22260c[_0xdc00('0x28')]:_0x1285c7[_0xdc00('0x27')];if(_0x5eb8de[_0xdc00('0x23')][_0xdc00('0x34')]){_0x22260c[_0xdc00('0x35')]=[{'all':!![]}];}_0x22260c=_[_0xdc00('0x30')]({},_0x22260c,_0x5eb8de[_0xdc00('0x33')]);return db[_0xdc00('0x21')][_0xdc00('0x3e')](_0x22260c)[_0xdc00('0x1b')](handleEntityNotFound(_0x3749b3,null))[_0xdc00('0x1b')](respondWithResult(_0x3749b3,null))['catch'](handleError(_0x3749b3,null));};exports[_0xdc00('0x3f')]=function(_0x16401d,_0x338233){return db['MemberReport'][_0xdc00('0x3f')](_0x16401d[_0xdc00('0x40')],{})['then'](respondWithResult(_0x338233,0xc9))[_0xdc00('0x38')](handleError(_0x338233,null));};exports[_0xdc00('0x1a')]=function(_0x54725e,_0x2bead5){if(_0x54725e[_0xdc00('0x40')]['id']){delete _0x54725e[_0xdc00('0x40')]['id'];}return db[_0xdc00('0x21')][_0xdc00('0x3e')]({'where':{'id':_0x54725e['params']['id']}})['then'](handleEntityNotFound(_0x2bead5,null))['then'](saveUpdates(_0x54725e[_0xdc00('0x40')],null))[_0xdc00('0x1b')](respondWithResult(_0x2bead5,null))['catch'](handleError(_0x2bead5,null));};exports[_0xdc00('0x1c')]=function(_0x3dd960,_0x153c1f){return db['MemberReport'][_0xdc00('0x3e')]({'where':{'id':_0x3dd960['params']['id']}})[_0xdc00('0x1b')](handleEntityNotFound(_0x153c1f,null))['then'](removeEntity(_0x153c1f,null))['catch'](handleError(_0x153c1f,null));};exports[_0xdc00('0x41')]=function(_0x2d0701,_0x5f3ab0){return db['MemberReport'][_0xdc00('0x41')]()[_0xdc00('0x1b')](respondWithResult(_0x5f3ab0,null))['catch'](handleError(_0x5f3ab0,null));};
\ No newline at end of file
+var _0x7fc8=['status','end','json','count','offset','limit','set','apply','save','then','destroy','sendStatus','error','stack','name','send','index','MemberReport','model','dateStart','query','dateEnd','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','add','day','where','filter','merge','map','options','include','rows','params','includeAll','find','catch','create','body','describe','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x1d30d3,_0x9f7c10){var _0x48914e=function(_0x393f3f){while(--_0x393f3f){_0x1d30d3['push'](_0x1d30d3['shift']());}};_0x48914e(++_0x9f7c10);}(_0x7fc8,0x6e));var _0x87fc=function(_0x1a84b1,_0x3ca6d8){_0x1a84b1=_0x1a84b1-0x0;var _0x161938=_0x7fc8[_0x1a84b1];return _0x161938;};'use strict';var jsonpatch=require(_0x87fc('0x0'));var rp=require(_0x87fc('0x1'));var moment=require(_0x87fc('0x2'));var BPromise=require(_0x87fc('0x3'));var Mustache=require(_0x87fc('0x4'));var util=require('util');var path=require('path');var sox=require(_0x87fc('0x5'));var csv=require(_0x87fc('0x6'));var ejs=require(_0x87fc('0x7'));var fs=require('fs');var _=require(_0x87fc('0x8'));var squel=require(_0x87fc('0x9'));var crypto=require(_0x87fc('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x87fc('0xb'));var toCsv=require(_0x87fc('0x6'));var querystring=require(_0x87fc('0xc'));var Papa=require(_0x87fc('0xd'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x87fc('0xe'));var utils=require(_0x87fc('0xf'));var config=require(_0x87fc('0x10'));var db=require(_0x87fc('0x11'))['db'];function respondWithStatusCode(_0x52f48a,_0x8c29db){_0x8c29db=_0x8c29db||0xcc;return function(_0x2e2fdd){if(_0x2e2fdd){return _0x52f48a['sendStatus'](_0x8c29db);}return _0x52f48a[_0x87fc('0x12')](_0x8c29db)[_0x87fc('0x13')]();};}function respondWithResult(_0x3882d6,_0x280684){_0x280684=_0x280684||0xc8;return function(_0x3d22b4){if(_0x3d22b4){return _0x3882d6[_0x87fc('0x12')](_0x280684)[_0x87fc('0x14')](_0x3d22b4);}};}function respondWithFilteredResult(_0x5eb07f,_0x5622a5){return function(_0x15db46){if(_0x15db46){var _0x1ff95c=_0x15db46[_0x87fc('0x15')],_0x263305=_0x5622a5[_0x87fc('0x16')],_0x3de5f7=_0x5622a5['offset']+_0x5622a5[_0x87fc('0x17')],_0x2d1ed5;if(_0x3de5f7>=_0x1ff95c){_0x3de5f7=_0x1ff95c;_0x2d1ed5=0xc8;}else{_0x2d1ed5=0xce;}_0x5eb07f['status'](_0x2d1ed5);return _0x5eb07f[_0x87fc('0x18')]('Content-Range',_0x263305+'-'+_0x3de5f7+'/'+_0x1ff95c)['json'](_0x15db46);}return null;};}function patchUpdates(_0x59b4b9){return function(_0x6d5405){try{jsonpatch[_0x87fc('0x19')](_0x6d5405,_0x59b4b9,!![]);}catch(_0x48c359){return BPromise['reject'](_0x48c359);}return _0x6d5405[_0x87fc('0x1a')]();};}function saveUpdates(_0x38e98b,_0xfc737a){return function(_0x45e633){if(_0x45e633){return _0x45e633['update'](_0x38e98b)[_0x87fc('0x1b')](function(_0x34db8e){return _0x34db8e;});}return null;};}function removeEntity(_0x3e0038,_0x32d539){return function(_0x569ed7){if(_0x569ed7){return _0x569ed7[_0x87fc('0x1c')]()['then'](function(){_0x3e0038['status'](0xcc)[_0x87fc('0x13')]();});}};}function handleEntityNotFound(_0x53c4d5,_0x540d5a){return function(_0x33fac4){if(!_0x33fac4){_0x53c4d5[_0x87fc('0x1d')](0x194);}return _0x33fac4;};}function handleError(_0x2424d1,_0x33e921){_0x33e921=_0x33e921||0x1f4;return function(_0x16a41e){logger[_0x87fc('0x1e')](_0x16a41e[_0x87fc('0x1f')]);if(_0x16a41e[_0x87fc('0x20')]){delete _0x16a41e['name'];}_0x2424d1[_0x87fc('0x12')](_0x33e921)[_0x87fc('0x21')](_0x16a41e);};}exports[_0x87fc('0x22')]=function(_0x49c51f,_0x2b3be8){var _0x56aa1e={},_0x140fec={},_0x1bf51c={'count':0x0,'rows':[]};var _0x2a186c=db[_0x87fc('0x23')]['rawAttributes'];_0x140fec[_0x87fc('0x24')]=_['keys'](_0x2a186c);var _0x1668fc={'dateStart':_0x49c51f['query'][_0x87fc('0x25')],'dateEnd':_0x49c51f[_0x87fc('0x26')][_0x87fc('0x27')]};delete _0x49c51f[_0x87fc('0x26')]['dateStart'];delete _0x49c51f['query'][_0x87fc('0x27')];_0x140fec['query']=_['keys'](_0x49c51f[_0x87fc('0x26')]);_0x140fec['filters']=_[_0x87fc('0x28')](_0x140fec[_0x87fc('0x24')],_0x140fec['query']);_0x56aa1e[_0x87fc('0x29')]=_[_0x87fc('0x28')](_0x140fec[_0x87fc('0x24')],qs[_0x87fc('0x2a')](_0x49c51f[_0x87fc('0x26')]['fields']));_0x56aa1e[_0x87fc('0x29')]=_0x56aa1e[_0x87fc('0x29')][_0x87fc('0x2b')]?_0x56aa1e[_0x87fc('0x29')]:_0x140fec['model'];if(!_0x49c51f[_0x87fc('0x26')][_0x87fc('0x2c')]('nolimit')){_0x56aa1e[_0x87fc('0x17')]=qs[_0x87fc('0x17')](_0x49c51f['query'][_0x87fc('0x17')]);_0x56aa1e[_0x87fc('0x16')]=qs['offset'](_0x49c51f[_0x87fc('0x26')]['offset']);}_0x56aa1e[_0x87fc('0x2d')]=qs[_0x87fc('0x2e')](_0x49c51f[_0x87fc('0x26')][_0x87fc('0x2e')]);_0x56aa1e['where']=qs[_0x87fc('0x2f')](_['pick'](_0x49c51f[_0x87fc('0x26')],_0x140fec[_0x87fc('0x2f')]));if(_0x1668fc[_0x87fc('0x25')]){if(_0x1668fc[_0x87fc('0x27')]){_0x1668fc[_0x87fc('0x27')]=moment(_0x1668fc['dateEnd'])[_0x87fc('0x30')](0x1,_0x87fc('0x31'));}else{_0x1668fc['dateEnd']=moment(_0x1668fc[_0x87fc('0x25')])[_0x87fc('0x30')](0x1,_0x87fc('0x31'));}_['merge'](_0x56aa1e[_0x87fc('0x32')],{'createdAt':{'$gte':_0x1668fc['dateStart'],'$lte':_0x1668fc['dateEnd']}});}if(_0x49c51f[_0x87fc('0x26')][_0x87fc('0x33')]){_0x56aa1e[_0x87fc('0x32')]=_[_0x87fc('0x34')](_0x56aa1e['where'],{'$or':_[_0x87fc('0x35')](_0x56aa1e[_0x87fc('0x29')],function(_0x22e64f){var _0x355ca9={};_0x355ca9[_0x22e64f]={'$like':'%'+_0x49c51f[_0x87fc('0x26')][_0x87fc('0x33')]+'%'};return _0x355ca9;})});}_0x56aa1e=_['merge']({},_0x56aa1e,_0x49c51f[_0x87fc('0x36')]);var _0x5d27d2={'where':_0x56aa1e[_0x87fc('0x32')]};return db['MemberReport'][_0x87fc('0x15')](_0x5d27d2)[_0x87fc('0x1b')](function(_0x415d3b){_0x1bf51c[_0x87fc('0x15')]=_0x415d3b;if(_0x49c51f['query']['includeAll']){_0x56aa1e[_0x87fc('0x37')]=[{'all':!![]}];}return db['MemberReport']['findAll'](_0x56aa1e);})['then'](function(_0x337ced){_0x1bf51c[_0x87fc('0x38')]=_0x337ced;return _0x1bf51c;})[_0x87fc('0x1b')](respondWithFilteredResult(_0x2b3be8,_0x56aa1e))['catch'](handleError(_0x2b3be8,null));};exports['show']=function(_0x436ead,_0x28e98c){var _0x1a9b42={'raw':!![],'where':{'id':_0x436ead[_0x87fc('0x39')]['id']}},_0x5db36a={};_0x5db36a['model']=_['keys'](db[_0x87fc('0x23')]['rawAttributes']);_0x5db36a['query']=_['keys'](_0x436ead[_0x87fc('0x26')]);_0x5db36a[_0x87fc('0x2f')]=_[_0x87fc('0x28')](_0x5db36a['model'],_0x5db36a['query']);_0x1a9b42[_0x87fc('0x29')]=_[_0x87fc('0x28')](_0x5db36a[_0x87fc('0x24')],qs[_0x87fc('0x2a')](_0x436ead[_0x87fc('0x26')][_0x87fc('0x2a')]));_0x1a9b42[_0x87fc('0x29')]=_0x1a9b42['attributes'][_0x87fc('0x2b')]?_0x1a9b42['attributes']:_0x5db36a[_0x87fc('0x24')];if(_0x436ead['query'][_0x87fc('0x3a')]){_0x1a9b42[_0x87fc('0x37')]=[{'all':!![]}];}_0x1a9b42=_[_0x87fc('0x34')]({},_0x1a9b42,_0x436ead[_0x87fc('0x36')]);return db[_0x87fc('0x23')][_0x87fc('0x3b')](_0x1a9b42)['then'](handleEntityNotFound(_0x28e98c,null))[_0x87fc('0x1b')](respondWithResult(_0x28e98c,null))[_0x87fc('0x3c')](handleError(_0x28e98c,null));};exports[_0x87fc('0x3d')]=function(_0x1abeb6,_0x154c62){return db[_0x87fc('0x23')][_0x87fc('0x3d')](_0x1abeb6[_0x87fc('0x3e')],{})[_0x87fc('0x1b')](respondWithResult(_0x154c62,0xc9))[_0x87fc('0x3c')](handleError(_0x154c62,null));};exports['update']=function(_0xb22fdc,_0x4cd9f2){if(_0xb22fdc[_0x87fc('0x3e')]['id']){delete _0xb22fdc[_0x87fc('0x3e')]['id'];}return db[_0x87fc('0x23')][_0x87fc('0x3b')]({'where':{'id':_0xb22fdc[_0x87fc('0x39')]['id']}})[_0x87fc('0x1b')](handleEntityNotFound(_0x4cd9f2,null))[_0x87fc('0x1b')](saveUpdates(_0xb22fdc['body'],null))[_0x87fc('0x1b')](respondWithResult(_0x4cd9f2,null))[_0x87fc('0x3c')](handleError(_0x4cd9f2,null));};exports[_0x87fc('0x1c')]=function(_0x2c5192,_0x195d00){return db[_0x87fc('0x23')]['find']({'where':{'id':_0x2c5192['params']['id']}})[_0x87fc('0x1b')](handleEntityNotFound(_0x195d00,null))['then'](removeEntity(_0x195d00,null))[_0x87fc('0x3c')](handleError(_0x195d00,null));};exports[_0x87fc('0x3f')]=function(_0x49e3bf,_0x34b96e){return db['MemberReport'][_0x87fc('0x3f')]()[_0x87fc('0x1b')](respondWithResult(_0x34b96e,null))[_0x87fc('0x3c')](handleError(_0x34b96e,null));};
\ No newline at end of file