Built motion from commit 0900f080.|2.5.45
[motion2.git] / server / api / voiceQueuesLog / voiceQueuesLog.controller.js
index 87d027d..335296a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73d1=['crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','send','index','map','VoiceQueuesLog','rawAttributes','fieldName','key','model','query','filters','intersection','fields','attributes','length','sort','where','pick','type','VIRTUAL','name','filter','options','includeAll','rows','catch','show','params','keys','include','merge','create','body','find','html-pdf','eml-format','zip-dir','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel'];(function(_0x4cd373,_0x14e9ed){var _0x451def=function(_0x31926f){while(--_0x31926f){_0x4cd373['push'](_0x4cd373['shift']());}};_0x451def(++_0x14e9ed);}(_0x73d1,0x123));var _0x173d=function(_0x201e07,_0x2dacc6){_0x201e07=_0x201e07-0x0;var _0x519a0f=_0x73d1[_0x201e07];return _0x519a0f;};'use strict';var pdf=require(_0x173d('0x0'));var emlformat=require(_0x173d('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x173d('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x173d('0x3'));var moment=require(_0x173d('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x173d('0x5'));var util=require(_0x173d('0x6'));var path=require(_0x173d('0x7'));var sox=require(_0x173d('0x8'));var csv=require(_0x173d('0x9'));var ejs=require(_0x173d('0xa'));var fs=require('fs');var _=require(_0x173d('0xb'));var squel=require(_0x173d('0xc'));var crypto=require(_0x173d('0xd'));var jsforce=require(_0x173d('0xe'));var deskjs=require(_0x173d('0xf'));var toCsv=require('to-csv');var querystring=require(_0x173d('0x10'));var Papa=require('papaparse');var Redis=require(_0x173d('0x11'));var authService=require(_0x173d('0x12'));var qs=require('../../components/parsers/qs');var as=require(_0x173d('0x13'));var hardwareService=require(_0x173d('0x14'));var logger=require(_0x173d('0x15'))(_0x173d('0x16'));var utils=require(_0x173d('0x17'));var config=require(_0x173d('0x18'));var licenseUtil=require('../../config/license/util');var db=require(_0x173d('0x19'))['db'];function respondWithStatusCode(_0x4c99dd,_0x384d80){_0x384d80=_0x384d80||0xcc;return function(_0x155af6){if(_0x155af6){return _0x4c99dd[_0x173d('0x1a')](_0x384d80);}return _0x4c99dd[_0x173d('0x1b')](_0x384d80)[_0x173d('0x1c')]();};}function respondWithResult(_0x4e89e8,_0x573983){_0x573983=_0x573983||0xc8;return function(_0x28c3dc){if(_0x28c3dc){return _0x4e89e8[_0x173d('0x1b')](_0x573983)[_0x173d('0x1d')](_0x28c3dc);}};}function respondWithFilteredResult(_0x4a8248,_0x233040){return function(_0x5a391f){if(_0x5a391f){var _0x330429=_0x5a391f[_0x173d('0x1e')],_0x360271=_0x233040['offset'],_0x1815e3=_0x233040[_0x173d('0x1f')]+_0x233040[_0x173d('0x20')],_0x1eefbb;if(_0x1815e3>=_0x330429){_0x1815e3=_0x330429;_0x1eefbb=0xc8;}else{_0x1eefbb=0xce;}_0x4a8248['status'](_0x1eefbb);return _0x4a8248[_0x173d('0x21')](_0x173d('0x22'),_0x360271+'-'+_0x1815e3+'/'+_0x330429)[_0x173d('0x1d')](_0x5a391f);}return null;};}function patchUpdates(_0x3e663a){return function(_0x4f9d80){try{jsonpatch[_0x173d('0x23')](_0x4f9d80,_0x3e663a,!![]);}catch(_0x295d75){return BPromise[_0x173d('0x24')](_0x295d75);}return _0x4f9d80[_0x173d('0x25')]();};}function saveUpdates(_0x1dfb52,_0x12576f){return function(_0x166a6){if(_0x166a6){return _0x166a6[_0x173d('0x26')](_0x1dfb52)[_0x173d('0x27')](function(_0x2ee30e){return _0x2ee30e;});}return null;};}function removeEntity(_0x223181,_0x530284){return function(_0x50dcc9){if(_0x50dcc9){return _0x50dcc9[_0x173d('0x28')]()[_0x173d('0x27')](function(){_0x223181[_0x173d('0x1b')](0xcc)[_0x173d('0x1c')]();});}};}function handleEntityNotFound(_0x1863c4,_0x52fd2f){return function(_0xc7d1da){if(!_0xc7d1da){_0x1863c4[_0x173d('0x1a')](0x194);}return _0xc7d1da;};}function handleError(_0x15f4da,_0x50f327){_0x50f327=_0x50f327||0x1f4;return function(_0x4d25bc){logger[_0x173d('0x29')](_0x4d25bc[_0x173d('0x2a')]);if(_0x4d25bc['name']){delete _0x4d25bc['name'];}_0x15f4da[_0x173d('0x1b')](_0x50f327)[_0x173d('0x2b')](_0x4d25bc);};}exports[_0x173d('0x2c')]=function(_0xf4bb67,_0x48e9b2){var _0xbf1ebf={},_0x15383a={},_0x3d7187={'count':0x0,'rows':[]};var _0x502025=_[_0x173d('0x2d')](db[_0x173d('0x2e')][_0x173d('0x2f')],function(_0x6d8318){return{'name':_0x6d8318[_0x173d('0x30')],'type':_0x6d8318['type'][_0x173d('0x31')]};});_0x15383a[_0x173d('0x32')]=_[_0x173d('0x2d')](_0x502025,'name');_0x15383a[_0x173d('0x33')]=_['keys'](_0xf4bb67[_0x173d('0x33')]);_0x15383a[_0x173d('0x34')]=_['intersection'](_0x15383a[_0x173d('0x32')],_0x15383a[_0x173d('0x33')]);_0xbf1ebf['attributes']=_[_0x173d('0x35')](_0x15383a[_0x173d('0x32')],qs[_0x173d('0x36')](_0xf4bb67['query'][_0x173d('0x36')]));_0xbf1ebf[_0x173d('0x37')]=_0xbf1ebf[_0x173d('0x37')][_0x173d('0x38')]?_0xbf1ebf[_0x173d('0x37')]:_0x15383a[_0x173d('0x32')];if(!_0xf4bb67[_0x173d('0x33')]['hasOwnProperty']('nolimit')){_0xbf1ebf['limit']=qs['limit'](_0xf4bb67['query'][_0x173d('0x20')]);_0xbf1ebf[_0x173d('0x1f')]=qs[_0x173d('0x1f')](_0xf4bb67[_0x173d('0x33')][_0x173d('0x1f')]);}_0xbf1ebf['order']=qs[_0x173d('0x39')](_0xf4bb67[_0x173d('0x33')][_0x173d('0x39')]);_0xbf1ebf[_0x173d('0x3a')]=qs[_0x173d('0x34')](_[_0x173d('0x3b')](_0xf4bb67[_0x173d('0x33')],_0x15383a['filters']),_0x502025);if(_0xf4bb67[_0x173d('0x33')]['filter']){_0xbf1ebf[_0x173d('0x3a')]=_['merge'](_0xbf1ebf[_0x173d('0x3a')],{'$or':_[_0x173d('0x2d')](_0x502025,function(_0x171bf0){if(_0x171bf0[_0x173d('0x3c')]!==_0x173d('0x3d')){var _0x4932d8={};_0x4932d8[_0x171bf0[_0x173d('0x3e')]]={'$like':'%'+_0xf4bb67['query'][_0x173d('0x3f')]+'%'};return _0x4932d8;}})});}_0xbf1ebf=_['merge']({},_0xbf1ebf,_0xf4bb67[_0x173d('0x40')]);var _0x23f10d={'where':_0xbf1ebf[_0x173d('0x3a')]};return db[_0x173d('0x2e')][_0x173d('0x1e')](_0x23f10d)[_0x173d('0x27')](function(_0x87628d){_0x3d7187[_0x173d('0x1e')]=_0x87628d;if(_0xf4bb67['query'][_0x173d('0x41')]){_0xbf1ebf['include']=[{'all':!![]}];}return db['VoiceQueuesLog']['findAll'](_0xbf1ebf);})[_0x173d('0x27')](function(_0x35dbe7){_0x3d7187[_0x173d('0x42')]=_0x35dbe7;return _0x3d7187;})[_0x173d('0x27')](respondWithFilteredResult(_0x48e9b2,_0xbf1ebf))[_0x173d('0x43')](handleError(_0x48e9b2,null));};exports[_0x173d('0x44')]=function(_0x8d17b9,_0x630f9a){var _0x20eaf6={'raw':!![],'where':{'id':_0x8d17b9[_0x173d('0x45')]['id']}},_0x293a67={};_0x293a67[_0x173d('0x32')]=_[_0x173d('0x46')](db[_0x173d('0x2e')][_0x173d('0x2f')]);_0x293a67[_0x173d('0x33')]=_[_0x173d('0x46')](_0x8d17b9[_0x173d('0x33')]);_0x293a67[_0x173d('0x34')]=_[_0x173d('0x35')](_0x293a67[_0x173d('0x32')],_0x293a67['query']);_0x20eaf6[_0x173d('0x37')]=_[_0x173d('0x35')](_0x293a67[_0x173d('0x32')],qs['fields'](_0x8d17b9[_0x173d('0x33')][_0x173d('0x36')]));_0x20eaf6[_0x173d('0x37')]=_0x20eaf6['attributes']['length']?_0x20eaf6['attributes']:_0x293a67[_0x173d('0x32')];if(_0x8d17b9[_0x173d('0x33')][_0x173d('0x41')]){_0x20eaf6[_0x173d('0x47')]=[{'all':!![]}];}_0x20eaf6=_[_0x173d('0x48')]({},_0x20eaf6,_0x8d17b9[_0x173d('0x40')]);return db[_0x173d('0x2e')]['find'](_0x20eaf6)['then'](handleEntityNotFound(_0x630f9a,null))[_0x173d('0x27')](respondWithResult(_0x630f9a,null))[_0x173d('0x43')](handleError(_0x630f9a,null));};exports['create']=function(_0x243ec7,_0x15dca5){return db['VoiceQueuesLog'][_0x173d('0x49')](_0x243ec7[_0x173d('0x4a')],{})[_0x173d('0x27')](respondWithResult(_0x15dca5,0xc9))[_0x173d('0x43')](handleError(_0x15dca5,null));};exports[_0x173d('0x26')]=function(_0x23e22c,_0x319942){if(_0x23e22c[_0x173d('0x4a')]['id']){delete _0x23e22c[_0x173d('0x4a')]['id'];}return db['VoiceQueuesLog']['find']({'where':{'id':_0x23e22c['params']['id']}})[_0x173d('0x27')](handleEntityNotFound(_0x319942,null))[_0x173d('0x27')](saveUpdates(_0x23e22c[_0x173d('0x4a')],null))[_0x173d('0x27')](respondWithResult(_0x319942,null))[_0x173d('0x43')](handleError(_0x319942,null));};exports[_0x173d('0x28')]=function(_0x56eb8c,_0x430067){return db['VoiceQueuesLog'][_0x173d('0x4b')]({'where':{'id':_0x56eb8c[_0x173d('0x45')]['id']}})[_0x173d('0x27')](handleEntityNotFound(_0x430067,null))['then'](removeEntity(_0x430067,null))[_0x173d('0x43')](handleError(_0x430067,null));};
\ No newline at end of file
+var _0xc7b3=['index','VoiceQueuesLog','rawAttributes','type','key','model','map','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','options','includeAll','rows','show','include','find','catch','create','body','params','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','ejs','fs-extra','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','json','undefined','limit','offset','count','apply','reject','save','destroy','then','stack','name','send'];(function(_0x37ded3,_0x371ebb){var _0x51e49e=function(_0x30cc78){while(--_0x30cc78){_0x37ded3['push'](_0x37ded3['shift']());}};_0x51e49e(++_0x371ebb);}(_0xc7b3,0x14b));var _0x3c7b=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0xc7b3[_0x19950b];return _0x3c6b41;};'use strict';var emlformat=require(_0x3c7b('0x0'));var rimraf=require(_0x3c7b('0x1'));var zipdir=require(_0x3c7b('0x2'));var jsonpatch=require(_0x3c7b('0x3'));var rp=require(_0x3c7b('0x4'));var moment=require(_0x3c7b('0x5'));var BPromise=require(_0x3c7b('0x6'));var Mustache=require('mustache');var util=require(_0x3c7b('0x7'));var path=require(_0x3c7b('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x3c7b('0x9'));var fs=require('fs');var fs_extra=require(_0x3c7b('0xa'));var _=require(_0x3c7b('0xb'));var squel=require(_0x3c7b('0xc'));var crypto=require(_0x3c7b('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x3c7b('0xe'));var toCsv=require(_0x3c7b('0xf'));var querystring=require(_0x3c7b('0x10'));var Papa=require(_0x3c7b('0x11'));var Redis=require(_0x3c7b('0x12'));var authService=require(_0x3c7b('0x13'));var qs=require('../../components/parsers/qs');var as=require(_0x3c7b('0x14'));var hardwareService=require(_0x3c7b('0x15'));var logger=require(_0x3c7b('0x16'))(_0x3c7b('0x17'));var utils=require(_0x3c7b('0x18'));var config=require(_0x3c7b('0x19'));var licenseUtil=require(_0x3c7b('0x1a'));var db=require(_0x3c7b('0x1b'))['db'];function respondWithStatusCode(_0x433401,_0x526699){_0x526699=_0x526699||0xcc;return function(_0x935259){if(_0x935259){return _0x433401[_0x3c7b('0x1c')](_0x526699);}return _0x433401[_0x3c7b('0x1d')](_0x526699)[_0x3c7b('0x1e')]();};}function respondWithResult(_0x49a8dc,_0x54872e){_0x54872e=_0x54872e||0xc8;return function(_0x150643){if(_0x150643){return _0x49a8dc['status'](_0x54872e)[_0x3c7b('0x1f')](_0x150643);}};}function respondWithFilteredResult(_0x53a419,_0x337542){return function(_0x44a9d5){if(_0x44a9d5){var _0x3a5db2=typeof _0x337542['offset']===_0x3c7b('0x20')&&typeof _0x337542[_0x3c7b('0x21')]==='undefined';var _0x1d2de8=_0x44a9d5['count'];var _0x4f71c6=_0x3a5db2?0x0:_0x337542[_0x3c7b('0x22')];var _0x2aa916=_0x3a5db2?_0x44a9d5[_0x3c7b('0x23')]:_0x337542[_0x3c7b('0x22')]+_0x337542[_0x3c7b('0x21')];var _0x4f258f;if(_0x2aa916>=_0x1d2de8){_0x2aa916=_0x1d2de8;_0x4f258f=0xc8;}else{_0x4f258f=0xce;}_0x53a419[_0x3c7b('0x1d')](_0x4f258f);return _0x53a419['set']('Content-Range',_0x4f71c6+'-'+_0x2aa916+'/'+_0x1d2de8)['json'](_0x44a9d5);}return null;};}function patchUpdates(_0x4c7c56){return function(_0x40d363){try{jsonpatch[_0x3c7b('0x24')](_0x40d363,_0x4c7c56,!![]);}catch(_0x327983){return BPromise[_0x3c7b('0x25')](_0x327983);}return _0x40d363[_0x3c7b('0x26')]();};}function saveUpdates(_0x4d4032,_0x49a029){return function(_0x139dd1){if(_0x139dd1){return _0x139dd1['update'](_0x4d4032)['then'](function(_0x22a12a){return _0x22a12a;});}return null;};}function removeEntity(_0x223391,_0x5a75bc){return function(_0x29313f){if(_0x29313f){return _0x29313f[_0x3c7b('0x27')]()[_0x3c7b('0x28')](function(){_0x223391[_0x3c7b('0x1d')](0xcc)[_0x3c7b('0x1e')]();});}};}function handleEntityNotFound(_0x2e931d,_0x5814b3){return function(_0x239059){if(!_0x239059){_0x2e931d[_0x3c7b('0x1c')](0x194);}return _0x239059;};}function handleError(_0x3af675,_0x3dad5b){_0x3dad5b=_0x3dad5b||0x1f4;return function(_0x498b30){logger['error'](_0x498b30[_0x3c7b('0x29')]);if(_0x498b30[_0x3c7b('0x2a')]){delete _0x498b30[_0x3c7b('0x2a')];}_0x3af675['status'](_0x3dad5b)[_0x3c7b('0x2b')](_0x498b30);};}exports[_0x3c7b('0x2c')]=function(_0x58a2ec,_0x456000){var _0x50b207={},_0xecff06={},_0x29a3a1={'count':0x0,'rows':[]};var _0x3bae65=_['map'](db[_0x3c7b('0x2d')][_0x3c7b('0x2e')],function(_0x28777d){return{'name':_0x28777d['fieldName'],'type':_0x28777d[_0x3c7b('0x2f')][_0x3c7b('0x30')]};});_0xecff06[_0x3c7b('0x31')]=_[_0x3c7b('0x32')](_0x3bae65,_0x3c7b('0x2a'));_0xecff06[_0x3c7b('0x33')]=_[_0x3c7b('0x34')](_0x58a2ec[_0x3c7b('0x33')]);_0xecff06[_0x3c7b('0x35')]=_[_0x3c7b('0x36')](_0xecff06['model'],_0xecff06[_0x3c7b('0x33')]);_0x50b207[_0x3c7b('0x37')]=_['intersection'](_0xecff06['model'],qs[_0x3c7b('0x38')](_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x38')]));_0x50b207[_0x3c7b('0x37')]=_0x50b207[_0x3c7b('0x37')][_0x3c7b('0x39')]?_0x50b207[_0x3c7b('0x37')]:_0xecff06[_0x3c7b('0x31')];if(!_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x3a')](_0x3c7b('0x3b'))){_0x50b207[_0x3c7b('0x21')]=qs[_0x3c7b('0x21')](_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x21')]);_0x50b207['offset']=qs[_0x3c7b('0x22')](_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x22')]);}_0x50b207['order']=qs[_0x3c7b('0x3c')](_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x3c')]);_0x50b207[_0x3c7b('0x3d')]=qs[_0x3c7b('0x35')](_[_0x3c7b('0x3e')](_0x58a2ec[_0x3c7b('0x33')],_0xecff06[_0x3c7b('0x35')]),_0x3bae65);if(_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x3f')]){_0x50b207[_0x3c7b('0x3d')]=_[_0x3c7b('0x40')](_0x50b207['where'],{'$or':_[_0x3c7b('0x32')](_0x3bae65,function(_0x509fce){if(_0x509fce[_0x3c7b('0x2f')]!=='VIRTUAL'){var _0x121e16={};_0x121e16[_0x509fce[_0x3c7b('0x2a')]]={'$like':'%'+_0x58a2ec['query'][_0x3c7b('0x3f')]+'%'};return _0x121e16;}})});}_0x50b207=_[_0x3c7b('0x40')]({},_0x50b207,_0x58a2ec[_0x3c7b('0x41')]);var _0x399d9b={'where':_0x50b207[_0x3c7b('0x3d')]};return db[_0x3c7b('0x2d')]['count'](_0x399d9b)['then'](function(_0x33d2d3){_0x29a3a1[_0x3c7b('0x23')]=_0x33d2d3;if(_0x58a2ec[_0x3c7b('0x33')][_0x3c7b('0x42')]){_0x50b207['include']=[{'all':!![]}];}return db[_0x3c7b('0x2d')]['findAll'](_0x50b207);})['then'](function(_0x41e099){_0x29a3a1[_0x3c7b('0x43')]=_0x41e099;return _0x29a3a1;})[_0x3c7b('0x28')](respondWithFilteredResult(_0x456000,_0x50b207))['catch'](handleError(_0x456000,null));};exports[_0x3c7b('0x44')]=function(_0x52b078,_0x564f48){var _0x5643e2={'raw':!![],'where':{'id':_0x52b078['params']['id']}},_0xf9a08c={};_0xf9a08c[_0x3c7b('0x31')]=_[_0x3c7b('0x34')](db[_0x3c7b('0x2d')]['rawAttributes']);_0xf9a08c[_0x3c7b('0x33')]=_[_0x3c7b('0x34')](_0x52b078['query']);_0xf9a08c[_0x3c7b('0x35')]=_['intersection'](_0xf9a08c[_0x3c7b('0x31')],_0xf9a08c[_0x3c7b('0x33')]);_0x5643e2['attributes']=_[_0x3c7b('0x36')](_0xf9a08c['model'],qs['fields'](_0x52b078['query'][_0x3c7b('0x38')]));_0x5643e2['attributes']=_0x5643e2[_0x3c7b('0x37')][_0x3c7b('0x39')]?_0x5643e2[_0x3c7b('0x37')]:_0xf9a08c[_0x3c7b('0x31')];if(_0x52b078[_0x3c7b('0x33')][_0x3c7b('0x42')]){_0x5643e2[_0x3c7b('0x45')]=[{'all':!![]}];}_0x5643e2=_['merge']({},_0x5643e2,_0x52b078[_0x3c7b('0x41')]);return db[_0x3c7b('0x2d')][_0x3c7b('0x46')](_0x5643e2)[_0x3c7b('0x28')](handleEntityNotFound(_0x564f48,null))[_0x3c7b('0x28')](respondWithResult(_0x564f48,null))[_0x3c7b('0x47')](handleError(_0x564f48,null));};exports[_0x3c7b('0x48')]=function(_0x56fe05,_0x5b7b8a){return db['VoiceQueuesLog'][_0x3c7b('0x48')](_0x56fe05[_0x3c7b('0x49')],{})[_0x3c7b('0x28')](respondWithResult(_0x5b7b8a,0xc9))[_0x3c7b('0x47')](handleError(_0x5b7b8a,null));};exports['update']=function(_0x1bb84b,_0x1a07a9){if(_0x1bb84b[_0x3c7b('0x49')]['id']){delete _0x1bb84b[_0x3c7b('0x49')]['id'];}return db[_0x3c7b('0x2d')]['find']({'where':{'id':_0x1bb84b[_0x3c7b('0x4a')]['id']}})[_0x3c7b('0x28')](handleEntityNotFound(_0x1a07a9,null))[_0x3c7b('0x28')](saveUpdates(_0x1bb84b[_0x3c7b('0x49')],null))[_0x3c7b('0x28')](respondWithResult(_0x1a07a9,null))['catch'](handleError(_0x1a07a9,null));};exports[_0x3c7b('0x27')]=function(_0x2babc9,_0x15244f){return db[_0x3c7b('0x2d')][_0x3c7b('0x46')]({'where':{'id':_0x2babc9[_0x3c7b('0x4a')]['id']}})['then'](handleEntityNotFound(_0x15244f,null))[_0x3c7b('0x28')](removeEntity(_0x15244f,null))[_0x3c7b('0x47')](handleError(_0x15244f,null));};
\ No newline at end of file