Built motion from commit 0900f080.|2.5.45
[motion2.git] / server / api / voiceQueuesLog / voiceQueuesLog.controller.js
index 8f8cb16..335296a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x821c=['create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','api','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','then','error','stack','name','send','index','map','VoiceQueuesLog','rawAttributes','fieldName','query','keys','filters','intersection','model','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','type','options','count','findAll','rows','catch','show','params','includeAll','include','find'];(function(_0x3fba9f,_0x3b7b9b){var _0x192cf1=function(_0x557290){while(--_0x557290){_0x3fba9f['push'](_0x3fba9f['shift']());}};_0x192cf1(++_0x3b7b9b);}(_0x821c,0x183));var _0xc821=function(_0x57ab74,_0x24e54b){_0x57ab74=_0x57ab74-0x0;var _0x1b4bff=_0x821c[_0x57ab74];return _0x1b4bff;};'use strict';var pdf=require(_0xc821('0x0'));var emlformat=require(_0xc821('0x1'));var rimraf=require(_0xc821('0x2'));var zipdir=require(_0xc821('0x3'));var jsonpatch=require(_0xc821('0x4'));var rp=require(_0xc821('0x5'));var moment=require(_0xc821('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xc821('0x7'));var util=require(_0xc821('0x8'));var path=require(_0xc821('0x9'));var sox=require(_0xc821('0xa'));var csv=require(_0xc821('0xb'));var ejs=require(_0xc821('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xc821('0xd'));var crypto=require(_0xc821('0xe'));var jsforce=require(_0xc821('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xc821('0xb'));var querystring=require(_0xc821('0x10'));var Papa=require(_0xc821('0x11'));var Redis=require(_0xc821('0x12'));var authService=require(_0xc821('0x13'));var qs=require(_0xc821('0x14'));var as=require(_0xc821('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xc821('0x16'));var utils=require('../../config/utils');var config=require(_0xc821('0x17'));var licenseUtil=require(_0xc821('0x18'));var db=require(_0xc821('0x19'))['db'];function respondWithStatusCode(_0x47e645,_0x40a016){_0x40a016=_0x40a016||0xcc;return function(_0x156ab8){if(_0x156ab8){return _0x47e645[_0xc821('0x1a')](_0x40a016);}return _0x47e645[_0xc821('0x1b')](_0x40a016)[_0xc821('0x1c')]();};}function respondWithResult(_0x3bdd40,_0x2f29a9){_0x2f29a9=_0x2f29a9||0xc8;return function(_0x1a23c8){if(_0x1a23c8){return _0x3bdd40['status'](_0x2f29a9)['json'](_0x1a23c8);}};}function respondWithFilteredResult(_0x3bd29d,_0x57296d){return function(_0x510f79){if(_0x510f79){var _0x492870=_0x510f79['count'],_0x79b34b=_0x57296d[_0xc821('0x1d')],_0x252ade=_0x57296d[_0xc821('0x1d')]+_0x57296d[_0xc821('0x1e')],_0x2174eb;if(_0x252ade>=_0x492870){_0x252ade=_0x492870;_0x2174eb=0xc8;}else{_0x2174eb=0xce;}_0x3bd29d['status'](_0x2174eb);return _0x3bd29d[_0xc821('0x1f')](_0xc821('0x20'),_0x79b34b+'-'+_0x252ade+'/'+_0x492870)[_0xc821('0x21')](_0x510f79);}return null;};}function patchUpdates(_0x162ed2){return function(_0x132c33){try{jsonpatch[_0xc821('0x22')](_0x132c33,_0x162ed2,!![]);}catch(_0x2e8a47){return BPromise[_0xc821('0x23')](_0x2e8a47);}return _0x132c33[_0xc821('0x24')]();};}function saveUpdates(_0x8df46c,_0x3ef4e0){return function(_0x132990){if(_0x132990){return _0x132990[_0xc821('0x25')](_0x8df46c)['then'](function(_0x4b7c14){return _0x4b7c14;});}return null;};}function removeEntity(_0x3985c2,_0x3ee660){return function(_0x10af30){if(_0x10af30){return _0x10af30[_0xc821('0x26')]()[_0xc821('0x27')](function(){_0x3985c2['status'](0xcc)[_0xc821('0x1c')]();});}};}function handleEntityNotFound(_0x55ec79,_0x8e77f4){return function(_0x3f27c8){if(!_0x3f27c8){_0x55ec79['sendStatus'](0x194);}return _0x3f27c8;};}function handleError(_0x1c6458,_0x2b57c9){_0x2b57c9=_0x2b57c9||0x1f4;return function(_0x1507a0){logger[_0xc821('0x28')](_0x1507a0[_0xc821('0x29')]);if(_0x1507a0[_0xc821('0x2a')]){delete _0x1507a0[_0xc821('0x2a')];}_0x1c6458[_0xc821('0x1b')](_0x2b57c9)[_0xc821('0x2b')](_0x1507a0);};}exports[_0xc821('0x2c')]=function(_0x3d3250,_0x361635){var _0x4ca62f={},_0x112fcd={},_0x1a6854={'count':0x0,'rows':[]};var _0x190747=_[_0xc821('0x2d')](db[_0xc821('0x2e')][_0xc821('0x2f')],function(_0x1213a9){return{'name':_0x1213a9[_0xc821('0x30')],'type':_0x1213a9['type']['key']};});_0x112fcd['model']=_[_0xc821('0x2d')](_0x190747,_0xc821('0x2a'));_0x112fcd[_0xc821('0x31')]=_[_0xc821('0x32')](_0x3d3250[_0xc821('0x31')]);_0x112fcd[_0xc821('0x33')]=_[_0xc821('0x34')](_0x112fcd[_0xc821('0x35')],_0x112fcd['query']);_0x4ca62f[_0xc821('0x36')]=_[_0xc821('0x34')](_0x112fcd[_0xc821('0x35')],qs[_0xc821('0x37')](_0x3d3250[_0xc821('0x31')][_0xc821('0x37')]));_0x4ca62f[_0xc821('0x36')]=_0x4ca62f['attributes'][_0xc821('0x38')]?_0x4ca62f[_0xc821('0x36')]:_0x112fcd[_0xc821('0x35')];if(!_0x3d3250[_0xc821('0x31')]['hasOwnProperty'](_0xc821('0x39'))){_0x4ca62f[_0xc821('0x1e')]=qs[_0xc821('0x1e')](_0x3d3250[_0xc821('0x31')][_0xc821('0x1e')]);_0x4ca62f[_0xc821('0x1d')]=qs[_0xc821('0x1d')](_0x3d3250[_0xc821('0x31')][_0xc821('0x1d')]);}_0x4ca62f[_0xc821('0x3a')]=qs[_0xc821('0x3b')](_0x3d3250[_0xc821('0x31')][_0xc821('0x3b')]);_0x4ca62f[_0xc821('0x3c')]=qs[_0xc821('0x33')](_[_0xc821('0x3d')](_0x3d3250[_0xc821('0x31')],_0x112fcd[_0xc821('0x33')]),_0x190747);if(_0x3d3250[_0xc821('0x31')][_0xc821('0x3e')]){_0x4ca62f[_0xc821('0x3c')]=_[_0xc821('0x3f')](_0x4ca62f['where'],{'$or':_['map'](_0x190747,function(_0x3ab374){if(_0x3ab374[_0xc821('0x40')]!=='VIRTUAL'){var _0x42d5f5={};_0x42d5f5[_0x3ab374[_0xc821('0x2a')]]={'$like':'%'+_0x3d3250[_0xc821('0x31')][_0xc821('0x3e')]+'%'};return _0x42d5f5;}})});}_0x4ca62f=_[_0xc821('0x3f')]({},_0x4ca62f,_0x3d3250[_0xc821('0x41')]);var _0x27e56a={'where':_0x4ca62f[_0xc821('0x3c')]};return db['VoiceQueuesLog'][_0xc821('0x42')](_0x27e56a)['then'](function(_0x13d670){_0x1a6854[_0xc821('0x42')]=_0x13d670;if(_0x3d3250['query']['includeAll']){_0x4ca62f['include']=[{'all':!![]}];}return db[_0xc821('0x2e')][_0xc821('0x43')](_0x4ca62f);})['then'](function(_0x45dde8){_0x1a6854[_0xc821('0x44')]=_0x45dde8;return _0x1a6854;})[_0xc821('0x27')](respondWithFilteredResult(_0x361635,_0x4ca62f))[_0xc821('0x45')](handleError(_0x361635,null));};exports[_0xc821('0x46')]=function(_0x197c97,_0x3e20bc){var _0x51446f={'raw':!![],'where':{'id':_0x197c97[_0xc821('0x47')]['id']}},_0x2c4cac={};_0x2c4cac['model']=_[_0xc821('0x32')](db['VoiceQueuesLog']['rawAttributes']);_0x2c4cac[_0xc821('0x31')]=_['keys'](_0x197c97[_0xc821('0x31')]);_0x2c4cac['filters']=_[_0xc821('0x34')](_0x2c4cac['model'],_0x2c4cac[_0xc821('0x31')]);_0x51446f[_0xc821('0x36')]=_['intersection'](_0x2c4cac[_0xc821('0x35')],qs['fields'](_0x197c97[_0xc821('0x31')][_0xc821('0x37')]));_0x51446f[_0xc821('0x36')]=_0x51446f['attributes'][_0xc821('0x38')]?_0x51446f[_0xc821('0x36')]:_0x2c4cac[_0xc821('0x35')];if(_0x197c97[_0xc821('0x31')][_0xc821('0x48')]){_0x51446f[_0xc821('0x49')]=[{'all':!![]}];}_0x51446f=_[_0xc821('0x3f')]({},_0x51446f,_0x197c97[_0xc821('0x41')]);return db[_0xc821('0x2e')][_0xc821('0x4a')](_0x51446f)[_0xc821('0x27')](handleEntityNotFound(_0x3e20bc,null))[_0xc821('0x27')](respondWithResult(_0x3e20bc,null))[_0xc821('0x45')](handleError(_0x3e20bc,null));};exports['create']=function(_0x16166e,_0x1e8bc6){return db[_0xc821('0x2e')][_0xc821('0x4b')](_0x16166e[_0xc821('0x4c')],{})['then'](respondWithResult(_0x1e8bc6,0xc9))[_0xc821('0x45')](handleError(_0x1e8bc6,null));};exports['update']=function(_0xe54411,_0x5c02de){if(_0xe54411[_0xc821('0x4c')]['id']){delete _0xe54411[_0xc821('0x4c')]['id'];}return db[_0xc821('0x2e')]['find']({'where':{'id':_0xe54411[_0xc821('0x47')]['id']}})[_0xc821('0x27')](handleEntityNotFound(_0x5c02de,null))['then'](saveUpdates(_0xe54411[_0xc821('0x4c')],null))[_0xc821('0x27')](respondWithResult(_0x5c02de,null))[_0xc821('0x45')](handleError(_0x5c02de,null));};exports[_0xc821('0x26')]=function(_0x25e80c,_0x49e5e2){return db[_0xc821('0x2e')][_0xc821('0x4a')]({'where':{'id':_0x25e80c['params']['id']}})[_0xc821('0x27')](handleEntityNotFound(_0x49e5e2,null))['then'](removeEntity(_0x49e5e2,null))['catch'](handleError(_0x49e5e2,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