From c1c9fd68b53178b31a52bc56adf0d807925ea1e6 Mon Sep 17 00:00:00 2001 From: "x.azuma.m@nds-tyo.co.jp" Date: Wed, 17 May 2023 19:24:45 +0900 Subject: [PATCH] =?UTF-8?q?load=E5=87=A6=E7=90=86=E3=81=AE=E3=82=AB?= =?UTF-8?q?=E3=83=90=E3=83=AC=E3=83=83=E3=82=B8=E7=A2=BA=E8=AA=8D=E5=88=86?= =?UTF-8?q?=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/vjsk/vjsk_file_check/conftest.py | 2 +- .../tests/batch/vjsk/vjsk_load/conftest.py | 41 +++++ .../batch/vjsk/vjsk_load/test_vjsk_load.py | 146 +++++++++++++++++- .../testdata/bio_slip_data_202304270000.gz | Bin 0 -> 2868 bytes .../batch/vjsk/vjsk_load/testdata/dummy.gz | Bin 0 -> 107 bytes .../testdata/fcl_mst_202304270000.gz | Bin 0 -> 2009 bytes .../testdata/hld_mst_202304270000.gz | Bin 0 -> 500 bytes .../testdata/lot_num_mst_202304270000.gz | Bin 0 -> 303 bytes .../testdata/mdb_conv_mst_202304270000.gz | Bin 0 -> 426 bytes .../testdata/mkr_org_horizon_202304270000.gz | Bin 0 -> 729 bytes .../testdata/org_cnv_mst_202304270000.gz | Bin 0 -> 402 bytes .../testdata/phm_prd_mst_202304270000.gz | Bin 0 -> 1134 bytes .../testdata/phm_price_mst_202304270000.gz | Bin 0 -> 413 bytes .../testdata/slip_data_202304270000.gz | Bin 0 -> 3134 bytes .../testdata/stock_slip_data_202304270000.gz | Bin 0 -> 899 bytes .../testdata/tran_kbn_mst_202304270000.gz | Bin 0 -> 419 bytes .../testdata/vop_hco_merge_202304270000.gz | Bin 0 -> 286 bytes .../testdata/whs_customer_mst_202304270000.gz | Bin 0 -> 1307 bytes .../testdata/whs_mst_202304270000.gz | Bin 0 -> 499 bytes 19 files changed, 184 insertions(+), 5 deletions(-) create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/conftest.py create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/bio_slip_data_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/dummy.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/fcl_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/hld_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/lot_num_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/mdb_conv_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/mkr_org_horizon_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/org_cnv_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/phm_prd_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/phm_price_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/slip_data_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/stock_slip_data_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/tran_kbn_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/vop_hco_merge_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/whs_customer_mst_202304270000.gz create mode 100644 ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/whs_mst_202304270000.gz diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_file_check/conftest.py b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_file_check/conftest.py index cfab500f..0778241d 100644 --- a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_file_check/conftest.py +++ b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_file_check/conftest.py @@ -1,4 +1,4 @@ -"""vjsk_file_cheak用テストフィクスチャoverride""" +"""vjsk_file_check用テストフィクスチャoverride""" import os diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/conftest.py b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/conftest.py new file mode 100644 index 00000000..ea29eb63 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/conftest.py @@ -0,0 +1,41 @@ +"""vjsk_load用テストフィクスチャoverride""" +import os + +import boto3 +import pytest + +from src.batch.vjsk.vjsk_recv_file_mapper import VjskReceiveFileMapper + + +@pytest.fixture +def s3_client(): + conn = boto3.client('s3') + yield conn + + +@pytest.fixture +def bucket_name(): + return os.environ["JSKULT_DATA_BUCKET"] + + +@pytest.fixture +def receive_folder(): + return os.environ["JSKULT_DATA_FOLDER_RECV"] + + +@pytest.fixture +def mapper(): + return VjskReceiveFileMapper() + +# @pytest.fixture +# def init_Load_ok(s3_client, bucket_name, receive_folder): +# # setup + +# s3_client.put_object(Bucket=bucket_name, +# Key=f'{receive_folder}/stock_slip_data_00000000000000.gz', Body=b'aaaaaaaaaaaaaaa') +# s3_client.put_object(Bucket=bucket_name, +# Key=f'{receive_folder}/slip_data_00000000000000.gz', Body=b'aaaaaaaaaaaaaaa') +# s3_client.put_object(Bucket=bucket_name, +# Key=f'{receive_folder}/org_cnv_mst_00000000000000.gz', Body=b'aaaaaaaaaaaaaaa') + +# # teardown diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/test_vjsk_load.py b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/test_vjsk_load.py index e9f88d81..43afd62c 100644 --- a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/test_vjsk_load.py +++ b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/test_vjsk_load.py @@ -1,6 +1,144 @@ -def test1(): - pass +from os import path + +import pytest + +from src.batch.common.batch_context import BatchContext +# from src.batch.vjsk.vjsk_data_load_manager import VjskDataLoadManager +from src.batch.vjsk.vjsk_importer import (_check_received_files, + _import_file_to_db) +from src.db.database import Database -def test2(): - pass +class TestImportFileToDb: + db: Database + batch_context: BatchContext + test_file_path: str + + @pytest.fixture(autouse=True, scope='function') + def pre_test(self, database: Database): + """テスト実行前後処理""" + # setup + self.test_file_path = path.join(path.dirname(__file__), "testdata") + + self.batch_context = BatchContext.get_instance() + + self.db = database + self.db.connect() + # self.db.begin() + + # testing + yield + + # teardown + # self.db.rollback() + self.db.disconnect() + + def test_import_file_to_db_ok(self, s3_client, bucket_name, receive_folder, mapper): + """ + 観点 + 正常系 : すべての受領データをデータベースに登録できる + 期待値 + 例外が発生しない + """ + # setup + self.batch_context.is_vjsk_stock_import_day = True + + test_files = [ + "stock_slip_data_202304270000.gz", + "slip_data_202304270000.gz", + "org_cnv_mst_202304270000.gz", + "vop_hco_merge_202304270000.gz", + "whs_mst_202304270000.gz", + "hld_mst_202304270000.gz", + "fcl_mst_202304270000.gz", + "mkr_org_horizon_202304270000.gz", + "tran_kbn_mst_202304270000.gz", + "phm_prd_mst_202304270000.gz", + "phm_price_mst_202304270000.gz", + "whs_customer_mst_202304270000.gz", + "mdb_conv_mst_202304270000.gz", + "bio_slip_data_202304270000.gz", + "lot_num_mst_202304270000.gz", + "dummy.gz" + ] + for test_file in test_files: + file_name = path.join(self.test_file_path, test_file) + key = f"{receive_folder}/{test_file}" + s3_client.upload_file(file_name, bucket_name, key) + + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_STOCK_SLIP_DATA)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_SLIP_DATA)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_ORG_CNV_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_VOP_HCO_MERGE)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_WHS_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_HLD_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_FCL_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_MKR_ORG_HORIZON)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_TRAN_KBN_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_PHM_PRD_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_PHM_PRICE_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_WHS_CUSTOMER_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_MDB_CONV_MST)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_BIO_SLIP_DATA)}") + # self.db.execute(f"truncate table {mapper.get_src_table(mapper.CONDKEY_LOT_NUM_MST)}") + + # assertion + received_s3_files = _check_received_files() + _import_file_to_db(received_s3_files) + + # self.db.connect() + + # # 検証 (卸在庫データファイル) + # table_name_org = mapper.get_org_table(mapper.CONDKEY_STOCK_SLIP_DATA) + # table_name_src = mapper.get_src_table(mapper.CONDKEY_STOCK_SLIP_DATA) + # result = self.db.execute(f"select * from {table_name_org}") + # assert result.rowcount == 10 + # result = self.db.execute(f"select * from {table_name_src}") + # assert result.rowcount == 10 + + # # 検証 (卸販売データ) + # table_name_org = mapper.get_org_table(mapper.CONDKEY_SLIP_DATA) + # table_name_src = mapper.get_src_table(mapper.CONDKEY_SLIP_DATA) + # result = self.db.execute(f"select * from {table_name_org}") + # assert result.rowcount == 10 + # result = self.db.execute(f"select * from {table_name_src}") + # assert result.rowcount == 10 + + # teardown + for test_file in test_files: + key = f"{receive_folder}/{test_file}" + s3_client.delete_object(Bucket=bucket_name, Key=key) + + # def test_load_stock_slip_data_ok(self, mapper): + # table_name_org = mapper.get_org_table(mapper.CONDKEY_SLIP_DATA) + # table_name_src = mapper.get_src_table(mapper.CONDKEY_SLIP_DATA) + + # # setup + # self.batch_context.is_vjsk_stock_import_day = True + # self.db.execute(f"truncate table {table_name_src}") + + # # assertion (insert) + # target_dict = { + # "condkey": mapper.CONDKEY_STOCK_SLIP_DATA, + # "src_file_path": path.join(self.test_file_path, "stock_slip_data_202304280000.tsv") + # } + # VjskDataLoadManager.load(target_dict) + + # result = self.db.execute(f"select * from {table_name_org}") + # assert result.rowcount == 4 + # result = self.db.execute(f"select * from {table_name_src}") + # assert result.rowcount == 4 + + # # assertion (update) + # target_dict = { + # "condkey": mapper.CONDKEY_STOCK_SLIP_DATA, + # "src_file_path": path.join(self.test_file_path, "stock_slip_data_202304290000.tsv") + # } + # VjskDataLoadManager.load(target_dict) + + # result_org = self.db.execute(f"select * from {table_name_org}") + # assert result_org.rowcount == 4 + # result_src1 = self.db.execute(f"select * from {table_name_src}") + # assert result_src1.rowcount == 6 + + # # teardown diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/bio_slip_data_202304270000.gz b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/bio_slip_data_202304270000.gz new file mode 100644 index 0000000000000000000000000000000000000000..36d1af4593f1b83a34e64c586b11a47eb6cae724 GIT binary patch literal 2868 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 literal 0 HcmV?d00001 diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/hld_mst_202304270000.gz b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/hld_mst_202304270000.gz new file mode 100644 index 0000000000000000000000000000000000000000..efedd921426c1148d8eee36540901f014c0e1cc0 GIT binary patch literal 500 zcmVgiwFoqtX*UT0BCGvUu|=AUotQjGz?i?+QbkJ`-ZXd z>#rprSO=G}7|B#%zyv7fpmUnadGL<`1i(2DV4dANMU(`HQXEo35azlcQQdw5!5%V` z>G?E(y?oaJ=KJHTH5bKG(2H9~EjjCoWUL3tNWTpevAWAax*in2RVw0C5Bo{H9>j7Y z#_?2-rv09fsT9L*qCZ_Ea@{bStU8ZdNdMVL7m91ScvJa}%0E^9sPZe7-KqRVWzQ;m zUtTW&wTmW|J*fOiWv_p=s{B@E_qy9`SuQP}=QbeyIzjjh;0(5_D=F3wE(!FN@i-Tw1kYs|D9uu+@UMEX2h^yewwRa%t5~i))t0k zbluRpHblo@1cSj`;N`iz1`!M>{k+=TY;a7+R#Iw; zgo<#8YK>}*dd0ZZ={XGFZsXl!PQw|Ep{i7)CJkZMSZYc&I-{vsm1?StreRyEG2>hf z`qHEVF5VlP(WJXqs;M&?29;`>Ni!cfBUKb?2pJ8d{#hdy78Vx%8=o133Tprg001U# Bhw1c3*9CbYC(sGBYqVGB+?VFfcB3VR8WNl3Pl{ zP!NXms;ek@ugvXSH*>I!V6Ycy(t>OA!6mr`=k%_&L5dWS{BX$3obb(0@=vQ#8qa5| zG;P{MKny|-RCjH&DtRGcH zFQ2Pi+?Lh>QE(mrF_^$;^cM91u%HG_a;=AQ2rS^Pr6KST!T>oM8!?=kZTSq~5s|DB zZz%)Te8r;>9Qf*C&Ce`!Lxdr^0lEk_8v4YSsAHCMeBALR1oxc}Cs=%Hw&!D}i5K+N z?ESMP(zO@*=P2PEAGdtA;^7DWGpm!&4A!v|@`m^Rl`XpE68|O=L^kL6xZ^w4m%98P zSlxWj&Kgp_Kgv(g|IQcXN5knOyK{Wp@{w(jPX7m1Ctn~~1S5jhANxlExy(OtBr0!< UUcGwt>h*v10l?2|!vG8b0P#W2IRF3v literal 0 HcmV?d00001 diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/mkr_org_horizon_202304270000.gz b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/mkr_org_horizon_202304270000.gz new file mode 100644 index 0000000000000000000000000000000000000000..835d236007b3aa749ac63f3d9bf9ef9681cf26f4 GIT binary patch literal 729 zcmV;~0w(<*iwFoetX*UT0Bvh>UvF|}UubV~X?kyNUotQZe$^pE)mmp?sM}$KnVXEROs?X=IDIxoL(NmN2(5<-?TI z!WCb^b9yWsb-v(unaO!>`q2KMrRRT6yPV8e>CAm=DV<3?Os6aa5C$qT0IfS&JEx4H z00h7=3?6Zm(GBc!u>uh(d@sL;^%2#395SVgX_isv%T4R0XJtPz#~Pp(a30 zgn9^d4s`+QA~Zs1aA*k75MeZgQ4XU5jEc|yxa*dp9_g+-`mru#7JyP82Up|w3rW^rYM$khO zsDMpSlNLl6epAq#2kJb8a}dTbh-oI%IM|2gpb^th3`f7q2*fPNq_EQ~zwve(e(9vs zu69q?#jyNz#n5CEuXkAPIiE?T=pVKGdev_}_RmYwPQ^|t4x=s^NN4FeI3j!dVrV5C zE1cA5(|0g7+D_GVp1ApaH-GFp$G@HVC^#`)D7@w;H-GNt+pgod&T~>|`7iU5&y-Ip zCL=EjELHqT=GSVSi-H(w$!E$Zl@X}2p2m^B#PERl&4#y8`{f&iKH!63N%c?asv!+q z6N76E>8MW!XyQQvz0yZ=u_MXVSpi`OdoO!-a82xLD=wl_)ffHXGf>#BIIlFyWnH6w~FS+Zow`p@bs LCB`z%03HAUu3ciK literal 0 HcmV?d00001 diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/org_cnv_mst_202304270000.gz b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/org_cnv_mst_202304270000.gz new file mode 100644 index 0000000000000000000000000000000000000000..89eb4a65c860810433383f7aec3b85d0c884d501 GIT binary patch literal 402 zcmV;D0d4*tiwFoatX*UT0B>?dERpN z)P{Uvvrac}r@UmG0`ehrT#lHq&;DD+|)V}rP=_b5cfu>xDx9z#)G578HhAG>6CTS3_-?8Dub{HI%;&W w>2V-6a75>DBy1Ukzd@%u681Qd890*Xa6}BMMvWRZYScya39mPJQ~(SB0D^V7aR2}S literal 0 HcmV?d00001 diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/phm_prd_mst_202304270000.gz b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/phm_prd_mst_202304270000.gz new file mode 100644 index 0000000000000000000000000000000000000000..169f6761a19b359dec7013fb730d8675dbeffc6d GIT binary patch literal 1134 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 Zr}+PXt?|0HD!Db zFo%8>zg61--L9NL*6j|e=&C0M_cJ)j;3R_w8JuMB9s~UhBpFCDFvviXfjx%sGX%*H zBtrxlf@FvuL;4w#WJr=BgA7SBq+{?0x9fBMUMzl94$^5@IAYgTa7ts{UkjyF-SnPNFem#*F!! Nd;xuB%U}Qu004LWxEBBb literal 0 HcmV?d00001 diff --git a/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/vop_hco_merge_202304270000.gz b/ecs/jskult-batch-daily/tests/batch/vjsk/vjsk_load/testdata/vop_hco_merge_202304270000.gz new file mode 100644 index 0000000000000000000000000000000000000000..58fbc63dc9c6a6172a51e020e1c64a029b77860f GIT binary patch literal 286 zcmV+(0pb21iwFoAtX*UT0CsP1Uua`*Uu|V_XJub9FfubRG%`0ZFfcG*E_7jX0PWI2 zYQr!P1yF69Qv@HNjHIz;okp0(w1u`dwrl7ay6r`}Z5O>vAJ(k%t}D#u_b=Q1|MYKN0k?F%1%8`e9 zKSw!vDgS>y*I(b#owWgNqS}DAplwuJ&2Ca$jw8bYC(sGBYqVGB+?VFfcB3VR8WN znB8*HKorNh)u&**(hHpZ$OrMx(FbtG2Vm58)KSp^)ETb|ZMA5pMJd!OSU=kFV``_g z+R`>j-$h75ul5x@*(C|I3IS#uFSUnbmGRtbmsoO@l@hoI+GxX zP$Ur*K|7yGKZ=ar5JpH<)d&);`x{QmvJ%0PL==fiR8e6*l@uisMUj8dVDHyb5%f>) z^&d92e{hCB17l}S@lN{Tbzyiq(+uSTOV~d$j!HmMF`!TC9`>?cQ{g`tqv+(1lQE1l7&4a2{ z&pB_NIumQo!XDFKF@34;je9O=8t&>Y$k=Db4l{P))=_Sl%$(yVbiT|@7~u=giuFc` z2EUKXDuO6<9jeKSq=5@H&$~2+q!^Z>7+;X-1uXq(>=+?g3PFhQ1ICxAgk>4aU;+}vgZ!w`#U8ROLKvl^UN@~S>WT<_T*q% zxd%eADhNUt=ggKkydu-feb+V=!tNEj0F8B6Ya3jgkTy7qsY2;!;Nqdd5e|+JOpky& z%odybSrLI&F>CEqLrP{pa8uCf91)=y1v~JgSqY<~_VOFM@Xyj>6DC?bhJB5ceT{?)b+k~^aA;7(1w|wx zG_qE+=06Pq=ZIfCS*eTM9)^njdevTB^~(=0XD#%--OyAZzzs3aM?y4kYa0lJP8$e3 z$O=ZI0Z|75BKg{9SMrBT1<*TZ#dHghPwTC32UdQiRbI1dkRi61zQOdB5H2af_RcZ0 z2omUT7hJ-fvB`Pmz*l^{e)Y=bUh%X1(c0P&r1+;Oa#UY5!;&%=cxsyI5IFES^#g}` zfrH|ThDYIq5e?1BRX7R_u5zrna4O3%0@(UGA$*P!xv1)wiM^_bm9Ng~J1F=(Z7X(E zfrY;77=q9wj0P)}y9z-Hl^_zZFjghMpiosZlFDH;SV0k}Tp@2)*5K7^xJ2aphHp{l zF*PM#y~3s-U+g%Vf{33XUb;d9`jgm2DT-0;xZ1h@aTzU&aG2MvKS5XW=X zr;y&2oy|w7FSDpARJ3X7rWL%o0YysnAXV^CZ0*Hr4=REm#Xij1YEQm`n{0@sjaY*Q z5Bal6W@l%1f9y=Qa+Kt$O)$bL(r_9HE!ni9{Gt#bluoA=BsKX}F(3sr4I7%OX|5kY z2SZsvN(?Gfd!?kHSkC%~dVlJtD#Y!AH8VArqUBX$6@+2s#cRVN-k0WVX>6|-W!#Es zmSli$+1X7mQEZmmG-Z%`voaM?2$WVrgP^W+puM3`a7v;?i4rA>RUa~aF$@3>004!C=xqQ1 literal 0 HcmV?d00001