0% found this document useful (0 votes)
7 views

Topic 06 - Exercise - HungN6

Uploaded by

hungnse173654
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as XLSX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Topic 06 - Exercise - HungN6

Uploaded by

hungnse173654
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as XLSX, PDF, TXT or read online on Scribd
You are on page 1/ 37

System : S4J

Exercise 1: Modulize your program


Step 1 : Copy your Program of Exercise Topic 05 - Internal Tble
Bước 1: Copy chương trình của phần 5 - internal table ra program mới

Step 2 : Modularize your source code using Subroutine


Bước 2: Mô đun hoá chương trình mới bằng subroutine

Step 3 : Check the source code and make sure you follow below Coding covnentio
Bước 3: Kiểm tra code xem có giống convention bên dưới chưa, nếu chưa thì sửa lại

Step 4 : Take screenshot of every subroutine


Bước 4: Chụp lại hình từng xử lý đã mô đun hoá xong

Exercise 2: Recursion
1. Research what Recursion is in programming
https://afteracademy.com/blog/what-is-recursion-in-programming
*** For vietnamese material please check Google
2. Use Recursion to solve Fibonacci problem in Topic 2, instead of using LOOP

3. Recursion can make your program run forever. Please check careful that you can exit the Recu

4. Trường hợp vướn phải vòng lặp vô hạn hoặc xử lý không thể kết thúc, sử dụng tcode SM50 để tắt cưỡ

Exercise 3: Experience on USING and CHANGING


For this exercise, you should Read the help from command FORM completely.
Then, write an executable program that has a routine that receives 4 global variables and change their va
Each variable will be received in a different way: 2 of them using the addition USING and the other 2 usin
For each pair use and omit the adding VALUE.

Print the contents of all global variables before the routine is called, at the beginning of the routine, at the

Exercise 4: Mini Program - Users Report

Write an executable program that contains 2 routines that prints all usernames in the system. (Check tab
1. First Routine: Get data from USR04
2. Second Routine: Print all the data
below Coding covnention
l that you can exit the Recursion. And DEBUG in your first run

ử dụng tcode SM50 để tắt cưỡng bức (End Process) hoặc thông báo Senior trong nhóm

variables and change their value.


n USING and the other 2 using the addition CHANGING from the FORM command.

eginning of the routine, at the end of the routine (after all values are changed) and after the PERFORM statement.

mes in the system. (Check table USR04 and its content in transaction SE11, SE16 or SE16N).
FORM statement.
System : S4J
Exercise 1:
Target Table: SPFLI Flight schedule
SLFIGHT Flight Information
T005T Country Name
SCARR Airline

Selection Screen:

Report Output:
*** You can check the Technical design for program outline
*&---------------------------------------------------------------------*
*& DATA DECLARATION
*&---------------------------------------------------------------------*

1. Declare a structure TY_REPORT for final report


Field Name Type Desciption
COUNTRYFR SPFLI-COUNTRYFR,
CITYFROM SPFLI-CITYFROM,
COUNTRYTO SPFLI-COUNTRYTO,
CITYTO SPFLI-CITYTO,
FLDATE SFLIGHT-FLDATE,
CARRID SPFLI-CARRID,
CONNID SPFLI-CONNID,
DEPTIME SPFLI-DEPTIME,
ARRTIME SPFLI-ARRTIME,
PERIOD SPFLI-PERIOD,
SEATSMAX SFLIGHT-SEATSMAX, So ghe khoang Economy
SEATSMAX_B SFLIGHT-SEATSMAX_B, So ghe khoang Business
SEATSMAX_F SFLIGHT-SEATSMAX_F, So ghe khoang First Class
SEATSOCC SFLIGHT-SEATSOCC, So ghe Economy da dat
SEATSOCC_B SFLIGHT-SEATSOCC_B, So ghe Business da dat
SEATSOCC_F SFLIGHT-SEATSOCC_F, So ghe First Class da dat

2. Declare a structure TY_COUNTRY to store Country Name


Field Name Type Desciption
LAND1 T005T-LAND1 Country Code
LANDX T005T-LANDX Country Name

3. Create an internal table from TY_REPORT

4. Create a sorted table from structure TY_COUNTRY to store Country Name

5. Create a sorted table from Table Name SCARR to store Airliner Name

*&---------------------------------------------------------------------*
*& SELECTION SCREEN
*&---------------------------------------------------------------------*
*** Check Exercise sheet

*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*

1. Select data from SFLIGHT inner join SPFLI

* Select data from SFLIGHT inner join SPFLI


**************************************************************************************
* Into: Standard Table of TY_REPORT
**************************************************************************************
* Join Condition: SFLIGHT~CARRID = SPFLI~CARRID and SFLIGHT~CONNID = SPFLI~CONNID
**************************************************************************************
* Query Condition: SFLIGHT~FLDATE IN S_FLDATE
* AND SPFLI~CARRID IN S_CARRID
* AND SPFLI~CONNID IN S_CONNID
* AND SPFLI~COUNTRYFR IN S_CTRFR
* AND SPFLI~CITYFROM IN S_CTYFR
* AND SPFLI~COUNTRYTO IN S_CTRTO
* AND SPFLI~CITYTO IN S_CTYTO
**************************************************************************************
* Order By: SPFLI~CITYFROM
* SPFLI~CITYTO
* SFLIGHT~FLDATE
* SPFLI~DEPTIME
* SPFLI~ARRTIME
**************************************************************************************
* SELECT fields: SFLIGHT~FLDATE " Flight Date
* SPFLI~CARRID " Airliner
* SPFLI~CONNID " Flight Number
* SPFLI~COUNTRYFR " From Country
* SPFLI~CITYFROM " From City
* SPFLI~COUNTRYTO " To Country
* SPFLI~CITYTO " To City
* SPFLI~DEPTIME " Departure Time
* SPFLI~ARRTIME " Arrival Time
* SPFLI~PERIOD " Flight Period in Days
* SFLIGHT~SEATSMAX, " Max seats in Economy
* SFLIGHT~SEATSMAX_B, " Max seats in Business Class
* SFLIGHT~SEATSMAX_F, " Max seats in First Class
* SFLIGHT~SEATSOCC, " Occupied seats in Economy
* SFLIGHT~SEATSOCC_B, " Occupied seats in Business Class
* SFLIGHT~SEATSOCC_F " Occupied seats in First Class
**************************************************************************************

2. Select data from Country Text Table T005T

* Select data from Country Text Table T005T


**************************************************************************************
* Into: Sorted Table of TY_COUNTRY
**************************************************************************************
* Join Condition: N/A
**************************************************************************************
* Query Condition: SPRAS (Language) = SY-LANGU (Logon Language)
**************************************************************************************
* Order By: N/A
**************************************************************************************
* SELECT fields: LAND1 " Country code
* LANDX " Country Name
**************************************************************************************

3. Select data from Airline Table SCARR

* Select data from Airline Table SCARR


**************************************************************************************
* Into: Sorted Table of SCARR
**************************************************************************************
* Join Condition: N/A
**************************************************************************************
* Query Condition: N/A
**************************************************************************************
* Order By: N/A
**************************************************************************************
* SELECT fields: *
**************************************************************************************

4. Loop at internal table of TY_REPORT to output report

4.1. At new block of FLDATE, CARRID, CONNID, COUNTRYFR, CITYFROM, COUNTRYTO, CITYTO

Read Sorted Table of TY_COUNTRY into a work area (Work Area: Country From)
using table key LAND1 = COUNTRYFR of current looping record

Read Sorted Table of TY_COUNTRY into a work area (Work Area: Country To)
using table key LAND1 = COUNTRYTO of current looping record

Output Country From and Country To


WRITE: /(20) 'Country From :', (20) GS_COUNTRYFR-LANDX, (20) ' - Country From :', (20) GS_COUNTRYTO-LANDX.

Output City From and City To


WRITE: /(20) 'City From :', (20) GS_REPORT-CITYFROM, (20) ' - City To :', (20) GS_REPORT-CITYTO.

Output column header for the list of flights


WRITE: /(12) 'Flight Date'
(12) 'Airline Cd'
(20) 'Airline Name'
(20) 'Flight Number'
(20) 'Depart Time'
(20) 'Arrival Time'
(15) 'Free Seats'

4.2. For every line of the loop

Read Sorted Table of SCARR into a work area


using table key CARRID = CARRID of current looping record

Calculate free seat: ( SEATSMAX - SEATSOCC ) + ( SEATSMAX_B - SEATSOCC_B ) + ( SEATSMAX_F - SEATSOCC_F )

Output list of flights


WRITE: /(12) FLDATE of current looping record
(12) CARRID of current looping record
(20) Field CARRNAME from work area of SCARR
(20) CONNID of current looping record
(20) DEPTIME of current looping record
(20) ARRTIME of current looping record
(15) Calculated free seats
Exercise/Remarks Screenshots

Exercise 1 Program Name: <YHUNGN6_D06_EX01>

Selection screen

Report output

INCLUDE yHUNGN6_D06_incl_definations
Form get_data_flight

Form get_data_country & Form get_airline_name

Form output_report
Form main_program

Exercise 2 Program Name: <YHUNGN6_D06_EX02>

Selection screen
Output report

Exercise 3 Program Name: <YHUNGN6_D06_EX03>

Output for Using and Changing

Exercise 4 Program Name: <YHUNGN6_D06_EX04>

Output for username in the USR04


INCLUDE yhungn6_incl_definations.
Exercise 1
*&---------------------------------------------------------------------*
*& Report YHUNGN6_D06_EX01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yhungn6_d06_ex01 NO STANDARD PAGE HEADING.

**Include
INCLUDE yHUNGN6_D06_incl_definations.

*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b-01 WITH FRAME TITLE TEXT-t01.
SELECT-OPTIONS fldate FOR gs_report-fldate.
SELECT-OPTIONS carrid FOR gs_report-carrid.
SELECT-OPTIONS connid FOR gs_report-connid.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS countfr FOR gs_report-countryfr.
SELECT-OPTIONS cityfrom FOR gs_report-cityfrom.
SELECT-OPTIONS countto FOR gs_report-countryto.
SELECT-OPTIONS cityto FOR gs_report-cityto.
SELECTION-SCREEN END OF BLOCK b-01.

**** Excute Event ****


START-OF-SELECTION.

*Main Processing
PERFORM main_program.

*&---------------------------------------------------------------------*
*& Form get_data_flight
*&---------------------------------------------------------------------*
*& Select data from SFLIGHT inner join SPFLI
*&---------------------------------------------------------------------*
*& --> c_t_s_REPORT
*&---------------------------------------------------------------------*
FORM get_data_flight USING c_ts_report TYPE ty_t_report.

SELECT
spfli~countryfr,
spfli~cityfrom,
spfli~countryto,
spfli~cityto,
sflight~fldate,
spfli~carrid,
spfli~connid,
spfli~deptime,
spfli~arrtime,
spfli~period,
sflight~seatsmax,
sflight~seatsmax_b,
sflight~seatsmax_f,
sflight~seatsocc,
sflight~seatsocc_b,
sflight~seatsocc_f
FROM sflight INNER JOIN spfli

** Join Condition
ON sflight~carrid = spfli~carrid
AND sflight~connid = spfli~connid

**Query Condition
WHERE sflight~fldate IN @fldate
AND spfli~carrid IN @carrid
AND spfli~connid IN @connid
AND spfli~countryfr IN @countfr
AND spfli~cityfrom IN @cityfrom
AND spfli~countryto IN @countto
AND spfli~cityto IN @cityto
**Order By
ORDER BY spfli~cityfrom,
spfli~cityto,
sflight~fldate,
spfli~deptime,
spfli~arrtime

** Into: Standard Table of TY_REPORT


INTO TABLE @c_ts_report.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form get_data_country
*&---------------------------------------------------------------------*
*& Select data from Country Text Table T005T
*&---------------------------------------------------------------------*
*& <-- C_TS_COUNTRY
*&---------------------------------------------------------------------*
FORM get_data_country CHANGING c_ts_country TYPE ty_t_country.
SELECT land1, " Country code
landx " Country Name
FROM t005t
WHERE spras = @sy-langu
INTO TABLE @c_ts_country.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_airline_name
*&---------------------------------------------------------------------*
*& Select data from Airline Table SCARR
*&---------------------------------------------------------------------*
*& <-- C_TS_AIRLINE
*&---------------------------------------------------------------------*
FORM get_airline_name CHANGING c_ts_airline TYPE ty_t_airline.
SELECT * FROM scarr
INTO TABLE @c_ts_airline.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form output_report
*&---------------------------------------------------------------------*
*& Loop at internal table of TY_REPORT to output report
*&---------------------------------------------------------------------*
*& --> U_T_REPORT
*& --> U_T_COUNTRY
*& --> U_T_SCARR
*&---------------------------------------------------------------------*
FORM output_report USING u_t_flisch TYPE ty_t_report
u_t_country TYPE ty_t_country
u_t_scarr TYPE ty_t_airline.
LOOP AT u_t_flisch ASSIGNING FIELD-SYMBOL(<lfs_flisch>).
DATA: ls_countryfr TYPE ty_country.
DATA: ls_countryto TYPE ty_country.

READ TABLE u_t_country INTO ls_countryfr


WITH TABLE KEY land1 = <lfs_flisch>-countryfr.

READ TABLE u_t_country INTO ls_countryto


WITH TABLE KEY land1 = <lfs_flisch>-countryto.

AT NEW cityto.
ULINE.
WRITE:/(20) 'Country from:',(20) ls_countryfr-landx,(20) '-Country to:',(2
/(20) 'City From:',(20) <lfs_flisch>-cityfrom,(20) '-City To:',(20) <lfs_f
ULINE.

READ TABLE u_t_scarr INTO DATA(ls_scarr)


WITH TABLE KEY carrid = <lfs_flisch>-carrid.

FORMAT COLOR COL_HEADING.


WRITE: /(12) 'Flight Date',
(12) 'Airline Cd',
(20) 'Airline Name',
(20) 'Flight Number',
(20) 'Depart Time',
(20) 'Arrival Time',
(15) 'Free Seats' RIGHT-JUSTIFIED.
FORMAT COLOR OFF.

ENDAT.

DATA: free_seat TYPE i VALUE 0.


CLEAR free_seat.

free_seat = ( <lfs_flisch>-seatsmax - <lfs_flisch>-seatsocc ) +


( <lfs_flisch>-seatsmax_b - <lfs_flisch>-seatsocc_b ) +
( <lfs_flisch>-seatsmax_f - <lfs_flisch>-seatsocc_f ).

FORMAT COLOR COL_NORMAL.


WRITE: /(12) <lfs_flisch>-fldate,
(12) <lfs_flisch>-carrid,
(20) ls_scarr-carrname,
(20) <lfs_flisch>-connid,
(20) <lfs_flisch>-deptime,
(20) <lfs_flisch>-arrtime,
(15) free_seat.
FORMAT COLOR OFF.

ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form main_program
*&---------------------------------------------------------------------*
*& Main Program
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM main_program .

**Declare an internal table from TY_REPORT


DATA: lt_report TYPE ty_t_report.

**Declare a sorted table from structure TY_COUNTRY to store Country Name


DATA: lt_s_country TYPE ty_t_country.

**Declare a sorted table from Table Name SCARR to store Airliner Name
DATA: lt_s_scarr TYPE ty_t_airline.
**Select data from SFLIGHT inner join SPFLI
PERFORM get_data_flight USING lt_report.

**Select data from Country Text Table T005T


PERFORM get_data_country CHANGING lt_s_country.

**Select data from Airline Table SCARR


PERFORM get_airline_name CHANGING lt_s_scarr.

**Loop at internal table of TY_REPORT to output report


PERFORM output_report USING lt_report
lt_s_country
lt_s_scarr.

ENDFORM.

Exercise 2
*&---------------------------------------------------------------------*
*& Report YHUNGN6_D02_EX02
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yhungn6_d06_ex02.

*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
**Parameter for number of Iterations, accept integer number
*Parameters for number of Iterations
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-t01.
PARAMETERS: p_number TYPE i OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b01.

START-OF-SELECTION.

PERFORM main_fibo USING p_number.

*&---------------------------------------------------------------------*
*& Form fibonanci_calculation
*&---------------------------------------------------------------------*
*& Fibonanci Main Calculation Logic
*&---------------------------------------------------------------------*
*& --> LD_NUMBER
*& --> LD_RESULT
*&---------------------------------------------------------------------*
FORM fibonanci_calculation CHANGING p_number
p_ld_number1
p_ld_number2
p_ld_number3
p_ld_iteration TYPE i.

IF p_number > 0.
WRITE: / p_ld_iteration && |. | && p_ld_number1.
p_ld_number3 = p_ld_number1 + p_ld_number2.
p_ld_number1 = p_ld_number2.
P_ld_number2 = p_ld_number3.
p_number -= 1.
p_ld_iteration += 1.

PERFORM fibonanci_calculation USING p_number


CHANGING p_ld_number1
p_ld_number2
p_ld_number3
p_ld_iteration.

ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form main_fibo
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_NUMBER
*&---------------------------------------------------------------------*
FORM main_fibo USING p_numbers TYPE i.

DATA: ld_number1 TYPE i,


ld_number2 TYPE i,
ld_number3 TYPE i,
ld_iteration TYPE i VALUE 1.

ld_number1 = 0.
ld_number2 = 1.

PERFORM fibonanci_calculation USING p_number


CHANGING ld_number1
ld_number2
ld_number3
ld_iteration.

ENDFORM.
Exercise 3
*&---------------------------------------------------------------------*
*& Report YHUNGN6_D06_EX03
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yhungn6_d06_ex03.
*Declare 4 Datas and Insert Value
DATA: gd_num1 TYPE i VALUE 1,
gd_num2 TYPE i VALUE 2,
gd_num3 TYPE i VALUE 3,
gd_num4 TYPE i VALUE 4.

*Print out Value Before Calling SubRoutine


WRITE: / 'Before the routine is called:'.
WRITE: / 'Number 1 = ' && | | && gd_num1,
/ 'Number 2 = ' && | | && gd_num2,
/ 'Number 3 = ' && | | && gd_num3,
/ 'Number 4 = ' && | | && gd_num4.

*Caling SubRoutine with 2 Value for Using and 2 Value for Changing
PERFORM modify_values USING gd_num1
gd_num2

CHANGING gd_num3
gd_num4.

*Print out the Value After Calling Perform


WRITE: / 'After Callingg PERFORM:'.
WRITE: / 'Number 1 Using = ' && | | && gd_num1,
/ 'Number 2 Using = ' && | | && gd_num2,
/ 'Number 3 Changing = ' && | | && gd_num3,
/ 'Number 4 Changing = ' && | | && gd_num4.

*&---------------------------------------------------------------------*
*& Form modify_values
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GV_NUM1
*& --> GV_NUM2
*& <-- GV_NUM3
*& <-- GV_NUM4
*&---------------------------------------------------------------------*
FORM modify_values USING VALUE(p_gd_num1)
VALUE(p_gd_num2) "If omit Value, change the Value inside Form still affect
TYPE i
CHANGING p_gd_num3
p_gd_num4
TYPE i.

WRITE: / 'At the beginning of the routine:'.


WRITE: / 'Number 1 Using = ' && | | && p_gd_num1,
/ 'Number 2 Using = ' && | | && p_gd_num2,
/ 'Number 3 Changing = ' && | | && p_gd_num3,
/ 'Number 4 changing = ' && | | && p_gd_num4.

p_gd_num1 = p_gd_num1 + 10.


p_gd_num2 = p_gd_num2 + 20.
p_gd_num3 = p_gd_num3 + 30.
p_gd_num4 = p_gd_num4 + 40.

WRITE: / 'At the end of the routine (after all values are changed):'.
WRITE: / 'Number 1 Using = ' && | | && p_gd_num1,
/ 'Number 2 Using = ' && | | && p_gd_num2,
/ 'Number 3 Changing = ' && | | && p_gd_num3,
/ 'Number 4 changing = ' && | | && p_gd_num4.

ENDFORM.

Exercise 4
*&---------------------------------------------------------------------*
*& Report YHUNGN6_D06_EX04
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yhungn6_d06_ex04.

***Include
INCLUDE yhungn6_incl_definations.

**** Excute Event ****


START-OF-SELECTION.

*Main Processing
PERFORM main_program.

*&---------------------------------------------------------------------*
*& Form main_program
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM main_program .
DATA: lt_username TYPE ty_t_username.

* Perform to get UserName


PERFORM get_username CHANGING lt_username.

* Perform to Output Username only


PERFORM output_username USING lt_username.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_username
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- C_LT_USERNAME
*&---------------------------------------------------------------------*
FORM get_username CHANGING c_lt_username TYPE ty_t_username.
SELECT
usr04~bname
FROM usr04 INTO TABLE @c_lt_username.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form output_username
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> u_LT_USERNAME
*&---------------------------------------------------------------------*
FORM output_username USING u_lt_username TYPE ty_t_username.
FORMAT COLOR COL_HEADING.
WRITE: /(20) 'Username'.
FORMAT COLOR OFF.

LOOP AT u_lt_username ASSIGNING FIELD-SYMBOL(<lfs_username>).


FORMAT COLOR COL_NORMAL.
WRITE: /(20) <lfs_username>-username.
FORMAT COLOR OFF.
ENDLOOP.
ENDFORM.
---------------------*

---------------------*

---------------------*

---------------------*

---------------------*
TLE TEXT-t01.

---------------------*

---------------------*

---------------------*

---------------------*
---------------------*

---------------------*

---------------------*

---------------------*
y_t_country.
---------------------*

---------------------*

---------------------*

---------------------*
y_t_airline.

---------------------*

---------------------*

---------------------*

---------------------*

x,(20) '-Country to:',(20) ls_countryto-landx,


'-City To:',(20) <lfs_flisch>-cityto.
-seatsocc ) +

---------------------*

---------------------*

---------------------*

---------------------*

to store Country Name

store Airliner Name


---------------------*

---------------------*

---------------------*

---------------------*

---------------------*
er number

LE TEXT-t01.

---------------------*

---------------------*

---------------------*

---------------------*
---------------------*

---------------------*

---------------------*

---------------------*
---------------------*

---------------------*

---------------------*

lue for Changing

---------------------*

---------------------*

---------------------*

---------------------*

inside Form still affect the Value of Data


ues are changed):'.

---------------------*

---------------------*

---------------------*

---------------------*

---------------------*

---------------------*
---------------------*

---------------------*

---------------------*

---------------------*

---------------------*
_username.

---------------------*

---------------------*

---------------------*

---------------------*
_username.

username>).

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy