深证期货交易数据JS混淆解析

[复制链接]
作者: bobin | 时间: 2021-10-29 15:05:35 | python源码分享|
1 214
发表于 2021-10-29 15:05:35| 显示全部楼层 |阅读模式
import requests
import pandas as pd # 表格存储
import execjs, js2py


jscode = '''
function sheel(_0xa0c834) {
    var _0x51eedc = {
        'pKENi': function _0x2f627(_0x5b6f5a, _0x440924) {
            return _0x5b6f5a === _0x440924;
        },
        'wnfPa': 'ZGz',
        'VMmle': '7|1|8|9|5|2|3|6|0|4',
        'GKWFf': function _0x1a4e13(_0x40cfde, _0x16f3c2) {
            return _0x40cfde == _0x16f3c2;
        },
        'MUPgQ': function _0x342f0d(_0x19038b, _0x4004d6) {
            return _0x19038b >= _0x4004d6;
        },
        'hLXma': function _0x55adaf(_0x45a871, _0x161bdf) {
            return _0x45a871 + _0x161bdf;
        },
        'JdOlO': function _0x13e00a(_0x5899a9, _0x4bb34d) {
            return _0x5899a9 + _0x4bb34d;
        },
        'qrTpg': function _0x1198fb(_0x55b317, _0x22e1db, _0x1b091a) {
            return _0x55b317(_0x22e1db, _0x1b091a);
        },
        'pdmMk': function _0xe2b022(_0x4af286, _0x4c2fd4) {
            return _0x4af286 - _0x4c2fd4;
        },
        'xVKWW': function _0x1094a3(_0x5f3627, _0x2a0ac5, _0x3ad2e5) {
            return _0x5f3627(_0x2a0ac5, _0x3ad2e5);
        }
    };
    if (_0x51eedc[_0x2246('0x258', '@1Ws')](_0x2246('0x259', 'E&PI'), _0x51eedc['wnfPa'])) {
        this['_append'](a);
        return this[_0x2246('0x25a', 'GL3Q')]();
    } else {
        var _0x492a62 = _0x51eedc[_0x2246('0x25b', '&59Q')][_0x2246('0x25c', ')q#9')]('|')
          , _0x356b01 = 0x0;
        while (!![]) {
            switch (_0x492a62[_0x356b01++]) {
            case '0':
                _0x554c90 = _grsa_JS[_0x2246('0x25d', 'E&PI')]['decrypt'](/s/e7b69cae23008d291fa1686a458dbbc4)
                }, _0x2cf8ae, {
                    'iv': _0x554c90,
                    'mode': _grsa_JS[_0x2246('0x16c', 'O^50')][_0x2246('0x25f', 'Who^')],
                    'padding': _grsa_JS[_0x2246('0x260', '7IfV')][_0x2246('0x261', 'E&PI')]
                })[_0x2246('0x1c', 'yY#5')](_grsa_JS['enc'][_0x2246('0x262', ']2BX')]);
                continue;
            case '1':
                if (_0x51eedc[_0x2246('0x263', 'Jsmq')](null, _0xa0c834) || _0x51eedc[_0x2246('0x264', '!2eC')](0x10, _0xa0c834['length']))
                    return _0xa0c834;
                continue;
            case '2':
                _0xa0c834 = _0x9843d3(_0xa0c834, _0x2cf8ae, 0x8);
                continue;
            case '3':
                _0x2cf8ae = _grsa_JS[_0x2246('0x265', 'RQ2o')][_0x2246('0x266', '3j7z')][_0x2246('0x267', 'RQ2o')](_0x554c90);
                continue;
            case '4':
                return _0x554c90[_0x2246('0x268', 'cs*4')](0x0, _0x51eedc[_0x2246('0x269', 'MVsm')](_0x554c90[_0x2246('0x26a', '0J6f')]('}'), 0x1));
            case '5':
                _0x554c90 = _0xa0c834[_0x2246('0x26b', 'UwHa')](_0x2cf8ae, 0x8);
                continue;
            case '6':
                _0x554c90 = _grsa_JS[_0x2246('0x26c', '4VZ$')]['Utf8']['parse'](_0x554c90);
                continue;
            case '7':
                if (!navigator || !navigator[_0x2246('0x26d', '0I#o')])
                    return '';
                continue;
            case '8':
                var _0x554c90 = _0x51eedc[_0x2246('0x26e', 'Yb4P')](_0x51eedc[_0x2246('0x26f', 'BQ5p')](parseInt, _0xa0c834[_0x51eedc[_0x2246('0x270', 'Z2VK')](_0xa0c834['length'], 0x1)], 0x10), 0x9)
                  , _0x2cf8ae = _0x51eedc[_0x2246('0x271', 'yY#5')](parseInt, _0xa0c834[_0x554c90], 0x10);
                continue;
            case '9':
                _0xa0c834 = _0x9843d3(_0xa0c834, _0x554c90, 0x1);
                continue;
            }
            break;
        }
    }
};
'''
data = '8261204EADDD8A39E542BAAD11C114FBFA4AAA6C241B68A0CD73EA377C7F1CAB4127E62C21457727ABF9FD6C6D74474449EF1323D550C061FEA4ED88426960194AAA7FC9AE7398E3C0C8B24490B66DC2FA007F1CBB5ED0863D69A0D6E102A0D9456C8ABB18137746664066CA4D9C09A4BBD649986B7AC0BA3BF81BEB2A76191EE6381D40DF3DC1ACDA790202EA4A6CF82E8D2F5D882AED8DE01F5ACE44E067BC7592C7AC76FD19112DE448B5B9FE1AA65DEF3C1046E4F3C84B316A2B8BC5BDF39C413408D997E44CCB97EA9E47BEC9CBD53BE79CBA8A8A7882C759F11524A450DC736D3B2B135932E2AE3DA3C14F266FA88F800AE1C69B0503CBFFD428F0660853D7AF60C3F5A689CC40CE2983AEDFA334C023B61ED78A83D5DA161584C021DB67AB94C3CFDAA42DE9DD295FE0BA9DE273096897F335AD5ECE1BB567D813C3E82604DE9E542C5DC03ED0A72718E420B64C8AE379FF92671A1433D32B495CCAABA8C34B7B9252231461E4998D7BC1787A85AC828AB0D1A845C0774B503F4852B00B7B8065CEFD661A65E3BE5B9E1C2F7B56D4E876006C59F6E5AA0149EDCC09660806807DC32214697BC37B2C270DD3D5874D6FF9D31DA558E6311212A283529D94F85283CD440298D7F77C127AF6389FEA93A1EB7A5528087784811CEDA456AF410D869F1EDED7D41ACE62804434A6AE67A39B5E872F0B216127603F8358C506F1874FF050483258D1A26EE41F659A6A8BC50FAEF37E7A8D2797F1496FF1727CE3BEDB3C300638AF99C0A4D79E66F176BBF2849A4B0051FCBEA9A044ED773E4C4848C55D428D7898F8612BAA2E7EBEA60CAAEF2D54C97525D7F4018CA3747F150946ED4653637F45248700299A449364B87EFB92475F5629B753E202E198ACC12305F019016244961D96C3D62F56F8107F92AEEF5B729FE051D05D671FB7A3CAEA6A4F896B7AC0BA3BF81BEB253A966BBC240E372F3DC1ACDA790202E1A580DEF6BDA58D3FEFB88E89EAA59A4D899E7FACDDA0B4915564ED609507C150CF83F0B0EAB9AD835EF3B260AF7466497BDED98752BD75AA64D8D2B3DA415221B1DFCDB15C1E7476F218F801CF0B1DF4173AA682A1C08D1E792DBF39749DA6D5D35F40DD5FB0F3156E3EC9EE7C9AB11ED2EE5E39940F4BF8F9A4F2F0E689E19C4847D24CF8C380491EE18D9EC164EAFAF1FE1BF1F7C0AD353B31BAF26FD208AC422918521CE6AE7FC6A472022E0956B6395AFB9102642EB2225BE54128AB37D0EA7F64C50D2960D6D9203E801442EF61BBC03A5AE8177B075DBEBCD99266AEA2F39AC8A131C2A1F22D1723F026D6991F37CEFDD89D6AA30B3A79736BB6BBD73DF4FB80B9ED9B8162058FF71131FCE0DEDF01AE833FE0F9DCDF74FEB80F9953242C5DC03ED0A72718E420B64C8AE379FF92671A1433D32B495CCAABA8C34B7B9252231461E4998D7BC1787A85AC828ABF810436259BA0CCBAC68D7EF147418E5F1C8571F9A1673A584E225950B2425AA149B42CC4D65281A7ABF3B723100E2F48BA271F001C10599A6C3E46DEF7C5645D50DC5A1E4BD56D8F32E2B3E86677A7151604E9608C863898F6CB955677FA3A0FAB0139CA5C5369E06E93AA533865D6449A563F329932D5F8B5AEAB2DEC2E241353737B06820EEB7BE1DB6EF7D67F25ECFB5EF3EF2D0D86553486E5138FE6E5F181C1EC731962E7E89708548806EC737D098098E70FE619AD3E8D39E802403DAFE335E73324B6787213E2FB39EC541DD7C6365DC9070F970D1BE586A8E50294831141040C68D2E53D0AD0B2EF6BA8AFE9897A921D66CC6F4089C3A3389CD9FB4DB55DFFC751004A4507AFF13E7D869C77B51D08043495E9069DB83D3A34548B3E7D0716222A5377B1B1DFCDB15C1E7479BBDDC732EC2CDCA61F7971A57FA3BA1D52F278CBE668D4DADD2D0E41BB9B5E4DFC96D80730DC459650459AD5F38097B395B2426A6F67185A6061C8B1D93279A5401371093A91ECEE9CB3012B95CC0E6B10BF6713633E29C06219FFD245DDFD495A325076EC459D6ADA7A93501A4B26BCC6C1CA5F289512015B5BC6B228737F03191552F9A6F0433134C1BADFC62D83593EFCF800239B13BEADA7948B567D77F02A35B2E4AD0E4006AAA90F156B1DAF78267900BFFF324AEC23518D918DFD6DEF0A1B9A2DF307B6B4232621A7855EBA90695E2B725710817CB47886496C9209FB429F688B2CEA4D987E1741CFF9B0EC497A3FB7A9F679AA454BCD073B944869A3431C569498D45B4C9054E4EDCEF54AE216A1F4E63CA2FA958FD1D456AA8D43D7B52C3095DE6308448364E12C27F8C7F2A2F82778F4C18979FD1BBA4D1971C876C0D99D9BDB7A8C18A39F8193A160167931825B946AF0F1FA8659E8262A9F7FF02C627540EAAAC37CC6A81A32A518C94909C87308C1790C8BB1FE4652EF19147726736C24989C27BCB4F8E8EFFB25B80D277C3EA0C0FCB02CE69C8F1D19C2B508543DC12C0A4A2C60E476DC97069D81FEF3B987A76BEF454478633D5BF324CEA599E8B9504D79B844022538278D9CBCD9AF6DF71E6AFA487F8564E639321D1F34E067BC7592C7AC72C4F7A5DC2C4DD4CACDD824622416C8D14323F5A355A30A555C43126906AEC79F451067D7A4C5A7247A31E1CADD6B8CF0E2AF06054A397517439F3157595A2BE06D14CFB02441A93B0E002B3359A222DA4226F5EAB0202E2390D5F04D29988532E9DA2359EE2E7459EF98A88AE5CC62353B31BAF26FD208AC422918521CE6AE7FC6A472022E0956B6395AFB9102642EB2225BE54128AB37D0EA7F64C50D2960D6D9203E801442EF61BBC03A5AE8177B075DBEBCD99266AEA2F39AC8A131C2A1FFBC21AAA5EF2313C573CBBACDBF23356E555C48504A06D140A65C36EC01539E70A93BF668AC72817EDF01AE833FE0F9DCDF74FEB80F9953242C5DC03ED0A72718E420B64C8AE379FF92671A1433D32B495CCAABA8C34B7B9252231461E4998D74A45151362E7EC83B347F3F06279CA037EDADA38F1AEEE4D84B22F527A5BBC00FFC840DBE15BF641149B42CC4D65281A010214F251D98DB9B2DB166E51EFD040950965DF8146E96AB3F7FA9DE0414A1FEF434E40CF2B6820A116ED3C4D02434022D172D234B8DA09F0B524546D1E9FA01EA838A909F6F4C8523C7277B0716C35C6677338BDA9F63536BAF3E22C112D761EF90982990741CF17FBC8CD63A1FD3628544FAC7326CC54185EBCB2BFF952B7378DB9F3CF68D1D4FD2DF22CE4550F16F8C0F174DA594D0635C502BF45CBF97C9D493615AA68B70A119D383694DE570FB423112E5528C61D6D8784BB87A07F87D918A932C479D01B5A3EA502CE3456D01EBEBC37F748E4CD1016F0E4DF1E9E826E4F3C84B316A2B856A44319A366D3DD8DB52463965BA48E548186F430F0B8E5F25CC7319956BE511B3BAAE70E8F82BC0B4EA72C78E2DA4C205DFAB47107B4A9E1FF0BBF245836BD9ACC4CF264209D232E72B3BBE698EED6245F4E940BD23E82FC43E8B4661C93245214BEB7291F75E978E602469B000BB554BA9453A1D863DF3A3335B0AE1D6E25FD1E5AF1C142DAFFD88E5BEDAD67D9315E2B3AE3945F586E4B15342A2D7ED573DE50B6B46422A39B76F5A032A53213535AC7694120D3B20FC2F5D674A364CCF8FA7F6AFB26B7287A904F4D700CE7477E2225DEBF82C9A15BE89D700B23C66D110EA7F64C50D2960D6D9203E801442EF61BBC03A5AE8177B075DBEBCD99266AEA2F39AC8A131C2A1FB79EB5B9C6A8ECDB573CBBACDBF23356291241BD08ABE227E4717F27320916586B557CECFAD9AFA89DE9B23E293574422D8F267DE81A2453AD7BF1022E987AD9025589D47F54C4AF8A39F8193A160167931825B946AF0F1FA8659E8262A9F7FF02C627540EAAAC3760CDB7C6826C0956B4E3A8C94FB39EDBBB1FE4652EF19147149E675A4BD16C2B9D5CA7A17FD71840776328F25FAB1E4374405A5FE59E4735E02E9368F658C6C8806AB3C017B070961203A751F56CD0FCF377AFFB79A8565AEBC782CBC929BA57A5B48EC71B7A8E2F1B93410A101F4AD9F908BFC4522431C8D2CEC6504138ABAC00AC1EB517236FED0B815CBCE67F8B3335E7E0608AF1CCC46D405A30540360AB15564ED609507C159470BF480F1F91B2157401D2BEAF4C914566D0E3E375FA465B840B2E364417D7E1330C984C1C59D1639C93300665FF7956E3EC9EE7C9AB11ED2EE5E39940F4BF8F9A4F2F0E689E19A6657C9CBC6C444591EE18D9EC164EAFD0AEBAE9C451B5D153B31BAF26FD208AC422918521CE6AE7FC6A472022E0956B6395AFB9102642EB2225BE54128AB37D0EA7F64C50D2960D6D9203E801442EF61BBC03A5AE8177B075DBEBCD99266AEACE8D6170CE4429179961BDD6D3D04589ED882FFEE27387B32DC57A6B00F19024A9A9FEA85997CC6DF8E2543BCADD08DBEDF01AE833FE0F9DCDF74FEB80F9953242C5DC03ED0A72718E420B64C8AE379FF92671A1433D32B495CCAABA8C34B7B94D88A93735A05E981B0314D634E1A5F4C2707BF5D9698102A559392A87EA653BC8722716D80B652AB70B104FBED010D3149B42CC4D65281AB6C91D57C3264A53EE7E6117DDB33C57A6C3E46DEF7C5645D50DC5A1E4BD56D8F32E2B3E86677A7151604E9608C863898F6CB955677FA3A0F0F61A452BFABCE96D12AA7E65FC09C84C97525D7F4018CA471DCC74F7B9A5BB70FF100F92291A2262BAE95C599DE6D275F5629B753E202E198ACC12305F01906E5C37AD332D4B3EE2A4B137B207EE2D1D1C6B69B98FC836738BF171A521049725802FBB55D19355487F86E512C35E34F232EA4AC00BDD38976803CF84470A245A3EA502CE3456D05F4C1BEADA1023ADDDDEF2A7B3CD6FFC6E4F3C84B316A2B8CA6F8FCE31CC45D98DB52463965BA48E7D99C5B48F768D8061F7971A57FA3BA1107ADBF2936ECEF9ADD2D0E41BB9B5E442A175F2583B34A2650459AD5F38097B395B2426A6F6718566DAC615EDA5A6596F57463D5A7DB33C7BD54D1CED1305F3BE23E4C9F0340B71969FC143F8692F5CED7303467E7CE470D504804C7847BB5C34E5F83D8488492132214697BC37B2C270DD3D5874D6FF9D31DA558E6311212A283529D94F85283CD440298D7F77C127B9C7746245DA9F5B30F091ACE8A959DCE39C013AD18F2B2C3A8F6DC3D0EE7BCD8A48C541FA51EC23955FC96F8A7486DEF3E894AD07B570BDED4040F7FCEA5BC8DE98E9D9800E15AA7148CBB631C8D8C882B69F078F18778602F6D7FDD06914466CD8CC2CAA032C6AB6981C99201997E053DC909570BDAE79959C8825024E8E78CCE612986D91C2B5EBF7F448A7E069782E42AEB73F28F5B50E0A7EC99102D608477F22F07A63ABE837E7A8D2797F1496FF1727CE3BEDB3C300638AF99C0A4D79E66F176BBF2849A4F6E67704635D14BCCB2CD3F3B2D0C581703FF113443B18CDE3B59F6B9B7F843E681350891C2459468B0BD6D4CC4949EE17FBC8CD63A1FD36DEA2F3FCC5D2189E78619CF1DBC7B106AE70521BDF24AF6AA27032D22FC157D08125671741FBB9089E4E6D4447FD23ED9907777E5172F702257E102466BF741F7FE6E36027FFA494B7BFB89A0A45695C5A3EA502CE3456D04020333E1E4F79A20ED203EDC3BEE0536E4F3C84B316A2B8DA17552B542BABA38DB52463965BA48E61564DBB8E35941E61F7971A57FA3BA14F54B8058887A0BCADD2D0E41BB9B5E42F814AABCA562D02650459AD5F38097B395B2426A6F67185B921BFC99F2D98B7FFB1C2BAA04151787BD54D1CED1305F3BE23E4C9F0340B71969FC143F8692F5CED7303467E7CE470D504804C7847BB5C34E5F83D8488492132214697BC37B2C270DD3D5874D6FF9D31DA558E6311212A283529D94F85283CD440298D7F77C12753D9C1B78D2A757067223CE8D2A289232FAC6C3325697A21789E53C731115C12C5EBD865E71A709B955FC96F8A7486DEF3E894AD07B570BDED4040F7FCEA5BC8DE98E9D9800E15AA7148CBB631C8D8C882B69F078F18778602F6D7FDD069144647581D76A118BBA4DB47742A463E04250D7AB2EB8020CC4A0FF81013D14EAF9EFC92C9296D547CF1EBF7F448A7E069788EC17F0AD017A6283437D4DF629652B2477F22F07A63ABE837E7A8D2797F1496FF1727CE3BEDB3C300638AF99C0A4D79E66F176BBF2849A4F6175171C5E10B86D4FE889BD110D0E1F0693CD62B72313A37F90662C663556BB8C7B879926FB00A146BF009F664284B17FBC8CD63A1FD361480D163F3020090B461A6121602AFA48BD3119349C7B4F5FD2C632F0C20B18D509E253F8ED2E9106DFA6A7C93EF2733EF3B987A76BEF4542CCE11C8A6A0A720F921D093C7B63D54F8C21C40E93EFED92A16F1F7B38589647ABBFD7DA0343D064C8F65E929CA51CC5EA1477B8AF1C665075DD29D2027F2DF4E067BC7592C7AC76E8F5E74BF59530315564ED609507C159470BF480F1F91B2189C0615DEFADDD9F25F610F6D878FCB906BCF6C9E6A64F0201ABA1C2F825EEDCDCB9B08FB4135EE06D14CFB02441A93B0E002B3359A222DA4226F5EAB0202E25332604ADC00103F598D170949E5BB371F2F6745B812950B5C596BF0A8E88F208A551BC7281E71E578E602469B000BB554BA9453A1D863DF3A3335B0AE1D6E25FD1E5AF1C142DAFFD88E5BEDAD67D9315E2B3AE3945F586E4B15342A2D7ED57350FCE78CCE004A67C7F8D07336AC1D892EC393DE92A599615BD5A22549F01112D8DAF186013E2A9B17FD48EF535A84F42225DEBF82C9A15BE89D700B23C66D110EA7F64C50D2960D6D9203E801442EF61BBC03A5AE8177B075DBEBCD99266AEACE8D6170CE4429173B72915BF9EDD04A2E438CCD480DB726F6703604C0E38D181F3FF8A9A0B3933DFA569F3A239C548C9DE9B23E293574427B44E12BF29051941E3778942C8072F0D3DAEA158FA0C17434036DDA0E3C1C59713D4027B2B69409527891BC0D8A66FB4E2BBCC88BA6C6E1703FF113443B18CDE9E645E54CEA2E3F1DFC3C8EAA28C78FEFA077A7B45CF4012E477A2F9FB8465B61C3896FC074A6DC8100E0468BB79800604520EC74FCE8717591C02FD9B26C5B89708548806EC737AA9555719534F3B5F66F4A0E9A68443EF8FD985FD9F169B81B4C7A683D07A1B8E59C4D7E1517F3582183264B34D86C803F00DBE9510BC1D6B824501CD6F6C8ECD1CD9A6546DDCB53F908BFC4522431C8E9BEE7F4C7592B47F61AB1CD748FF7634E067BC7592C7AC72BED1C3A4B651DBA15564ED609507C159470BF480F1F91B2F38058DBC4EE94AA870C1EA3FEF1B3EE818CA70EEAA49BC98FCFB3C9E69CEB40037263A963648FB37AA856857ABC69323D01469360EC44DF8F9A4F2F0E689E198E80D21E7C14F3E02E9DA2359EE2E745FC43E8B4661C93242A25AFEA5F911E42F0FFEFD0EC0BA5035FC3AAF74EC3F499EC50AB3E8490D5FCDAF7170FA88800B269247C3294F1E13ECB47886496C9209FB429F688B2CEA4D987E1741CFF9B0EC497A3FB7A9F679AA43BD52718F03E14B852B0A21094F5D4287DF478EED4635F185B9520234FD6D08FE32BA2DD70101248E817744CF617E3D9242ED490F63E187020AD1809244C0EEA53800E9064B4774E3C80F18ACC4B2A9392ECD8AC7AE3A6D056DC6EB35839AFD8BEAE6B812FF911EAF99C7C7A10B24C90A7F7F39903B8331A15482467576093AC886D9E87FE53C2CA1C7F37783F6A44D725E490C9A2DEB006645FBDBA1DC44F7D2E1D52B9062EFFCC03703078449517AEEF434E40CF2B6820A116ED3C4D024340ED4843AEF88F67443C55F3C3BAFBE76AAA4FCF0AB2A8547BE03CC581541D81F935DDF0EBB3B324AA523C7277B0716C35371E47A196C5D51BE96F4A581C9B9EE36987064AC718C50D3CED65E769E36AB889708548806EC737A7F4F1AD2F718B8FCC465CAE53B1B41509426E7E05D06BC049BBD1E7A66297D086F486A8F2EC2AB4BA4C0C065C0493A6978BD132B27C4299'
data1 = execjs.compile(jscode).call('sheel', data)
print(data1)
time1 = js2py.eval_js('Math.floor(new Date().getTime() / 1000);')
mcode = execjs.compile(jscode).call('missjson', '{}'.format(time1))

url = 'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1007'
headers = {
    'mcode': mcode,
    'Referer': 'http://webapi.cninfo.com.cn/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36 Edg/94.0.992.31'
}
data = {
    'tdate': '2021-09-30',
    'market': 'SZE'
}
response = requests.post(url, headers=headers, data=data).json()
records = response['records']

df = pd.DataFrame(records) # [{"键(表头)":"值"}, {}, {}, {}, {}, {}]
df.to_excel('123.xlsx')

签到天数: 1 天

发表于 2021-12-25 21:17:14| 显示全部楼层
谢谢分享。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

!jz_fbzt! 快速回复 !jz_sctz! !jz_fhlb! 按钮
快速回复 返回列表 返回顶部