dowload the file sub<- readRDS(“Substatnive.RData”) View(sub)
TRANSLATE COLUMN FROM ENGLISH TO POLISH Aging_en<-sub\(Aging#abstract the table of Aging View(Aging_en)
colnames(Aging_en)<-c("LP","Nr","Account
Name","Typ","Wn_Dr","Ma_Cr","Turnover
Dr","Turnover
Cr","Saldo_Balance","Current","<30","31_60","61_90","90_180","180_360",">1Y","PD","LGD","EAD")
BankAcc_en<-sub\)BankAcc View(BankAcc_en)
colnames(BankAcc_en)<-c(“Date”,“Konto_DR.1.35700.”,“Konto_CR.1.35700.”,“Wartosc.1.35700.”,“Opis.1.35700.”)
ChOA_en<-sub\(ChOA View(ChOA_en)
colnames(ChOA_en)<-c("Section","Number","Account
name","Class","Typ")
Journal_en<-sub\)Journal View(Journal_en)
colnames(Journal_en)<-c(“Date”,“Konto_DR.1.35700.”,“Konto_CR.1.35700.”,“Wartosc.1.35700.”,“Opis.1.35700.”)
Counter<-sub\(Kontr View(Counter)
colnames(Counter)<-c("LP","Nr","Name","Typ","Wn_Dr","Ma_Cr","OB._WN_DR","OB._MA_CR","Saldo_Balance")
TB_en<-sub\)TB View(TB_en)
colnames(TB_en)<-c(“Nr”,“Class”,“NR.1”,“Account
name”,“Class”,“Subclass”,“Opening Balance”,“Debit turnover”,“Credit
turnover”,“Closing balance”) ZPK_en<-sub\(ZPK View(ZPK_en)
colnames(ZPK_en)<-c("Section","Number","Nazwa
konta","Account name","Account type")
FAR_RST_Final_en<-sub\)FAR_RST_Final View(FAR_RST_Final_en)
colnames(FAR_RST_Final_en)<-c(“LP”,“Date”,“Name”,“City”,“Depreciation
rate”,“Gross
value”,“Acc.depreciation”,“Depreciation”,“Sold”,“Type”,“NAME”)
CC_PL_en<-sub\(CC_PL View(CC_PL_en)
CC_BS_en<-sub\)CC_BS View(CC_BS_en)
Question 1 Reconcile the Turnover to the T&E
turnover <- TB_en\(`Credit
turnover`-TB_en\)Debit turnover reconciled_TB<-
cbind(TB_en,Turnover=turnover) View(reconciled_TB)
Question 2 Make an Analytical review of fixed assets B/O + Increases
- Decreases Reclassification BZ for gross and net worth. Analytically
check the accrual for the reasonableness of the depreciation charge
Fixed_asset_bs<-CC_BS_en[7,]#Abstract fixed assets from BS
View(Fixed_asset_bs)
Fixed_asset_tb<-TB_en[c(1,5),c(4,7,8,9,10)]#Fixed assets and
accumulated depreciation from TB View(Fixed_asset_tb)
Fixed_asset_Tb_OB<-Fixed_asset_tb[1,2]-Fixed_asset_tb[2,2]#Calculate
net value of fixed assets at previous financial year Fixed_asset_Tb_OB
Fixed_asset_Tb_CB<-Fixed_asset_tb[1,5]-Fixed_asset_tb[2,5]#The net
value of fixed assets at current financial year Fixed_asset_Tb_CB
Fixed_asset_Diff<-c(Fixed_asset_Tb_OB-Fixed_asset_bs[1,3],Fixed_asset_Tb_CB-Fixed_asset_bs[1,2])#Comparison
of the results from TB and BS Fixed_asset_Diff
The fixed assets’ figures in the trial balance (TB) for the end of
the previous year and the end of the current year are as follows:
-640,895.4 and -673,582.5, respectively. Upon reviewing the TB, it is
evident that the Gross Value of fixed assets has increased from
15,930.52 to 22,894.136 over the course of the year. Consequently, one
would expect the accumulated depreciation to have also increased.
However, the TB shows that the year-end accumulated depreciation amount
is 7,943.673, which is lower than the beginning-of-the-year value of
12,100.92. This difference indicates abiaised depreciation charge for
the current year.
Question 3 Check the fixed assets register for arithmetic
accuracy
Fixed_3<-FAR_RST_Final_en[,c(11,2,5,6,7,8)]#Extract
“NAME”“Date”“Depreciation rate”“Gross value”“Acc.Deprecition”and
“Depreciation” from FAR View(Fixed_3) Fixed_3\(Dep<-Fixed_3\)Depreciation rate*Fixed_3\(`Gross value`#calculate the depreciation of the
fixed assets Fixed_3\)DepDiff<-Fixed_3\(Dep-Fixed_3\)Depreciation #Comparison of
the depreciation after recalculating with the original depreciation in
the table sum_deprecation_Diff<-sum(Fixed_3\(DepDiff) sum_deprecation_Diff
Fixed_3\)ClosingDate<-as.Date(“2023-04-30”) #Create a new
column and insert the current time from Journal Fixed_3\(Date<-as.Date(Fixed_3\)Date)#Change date
format library(lubridate) Fixed_3\(MonthDiff<-interval(Fixed_3\)Date,Fixed_3\(ClosingDate)%/% months(1)#Calculation of the
number of month between purchase time and current time
Fixed_3\)Acc.dep<-(Fixed_3\(Dep/12)*Fixed_3\)MonthDiff#calculate the
accumulated dep. Fixed_3\(Acc.dep<-ifelse(Fixed_3\)Acc.dep>Fixed_3\(`Gross
value`,Fixed_3\)Gross value,Fixed_3\(Acc.dep)#When the result is higher than gross
value,then the answer is gross value
Fixed_3\)Acc.depDiff<-(Fixed_3\(Acc.dep-Fixed_3\)Acc.depreciation)#Calculate
the difference between original Acc.dep. and recalculated Acc.dep
sum_Acc.depDiff<-sum(Fixed_3$Acc.depDiff) sum_Acc.depDiff
Question 4 :lnvalidate the provision for receivables. Prospective and
retrospective.
Aging_subset<-Aging_en[Aging_en\(Typ=="Odbiorca",]#Make an extraction
based on the keyword “Odbiorca”of Typ column in Ag View(Aging_subset)
Aging_subset\)Provision<-rowSums(Aging_subset[,11:16])#calculate
the sum of bad debt for each patron sumPro<-sum(Aging_subset\(Provision)# sum of bad debts sumPro
Aging_subset\)EL<-Aging_subset\(PD*Aging_subset\)LGD*Aging_subset\(EAD#calculate EL for each patron
sumEL<-sum(Aging_subset\)EL) sumEL
Provision_TB<-TB_en[36,]#provision of bad debts for trade receivable
View(Provision_TB) Diff_1<-sumPro-Provision_TB[1,10]#Compare the
provision from TB with the sum of bad debt based on aging analysis
Diff_1 Diff_2<-sumEL-Provision_TB[1,10]#Compare the provision from TB
with the sum of bad debt based on prospective approach Diff_2 The
differences observed when considering the aging analysis and prospective
approach are as follows: [1] 12,439,568 [1] 153,575.9. Assessing the
aging study and adopting a forward-looking perspective, it becomes
apparent that the provision specified in the trial balance (TB) is
insufficient to cover the bad debt. Therefore, a modification is
necessary to address this issue.
Question 6:Reconcile the equity position to the KRS extract.
Equity_TB<-TB_en[c(99,100,101,102,109,110,111),c(4,7,10)]#Rows
related to equity from TB View(Equity_TB)
Equity_TB_OB<-Equity_TB[1,2]+Equity_TB[2,2]+Equity_TB[3,2]+Equity_TB[4,2]+Equity_TB[5,2]-Equity_TB[6,2]-Equity_TB[7,2]#
equity at the end of previous financial year Equity_TB_OB
Equity_TB_CB<-Equity_TB[1,3]+Equity_TB[2,3]+Equity_TB[3,3]+Equity_TB[4,3]+Equity_TB[5,3]-Equity_TB[6,3]-Equity_TB[7,3]#equity
at the end of current financial year Equity_TB_CB
Equity_01<-c(Equity_TB_OB,Equity_TB_CB) View(Equity_01)
Equity_BS<-CC_BS_en[50,]#equity from BS View(Equity_BS)
Equity_Diff<-c(Equity_TB_OB-Equity_BS[1,3],Equity_TB_CB-Equity_BS[1,2])#Comparison
of the results from TB with the data in BS Equity_Diff
The differences between the end of the previous financial year and
the end of the current financial year are as follows: [1] -538,014.9
-553,514.9.
Question 7 Take a sample of fixed assets and check the calculation of
depreciation.
sample(c(1:113),10,replace = FALSE)#Pick 10 number from 1 to 113 at
random
Fixed_asset_07<-FAR_RST_Final_en[c(37,16,11,77,93,72,112,7,85,83),c(11,2,5,6,7,8,9)]#Extract
corresponding rows according to the number View(Fixed_asset_07)
Fixed_asset_07\(Closingdate<-as.Date("2023-04-30")#Create
a new column and insert the current time from Jouranl
Fixed_asset_07\)Date<-as.Date(Fixed_asset_07\(Date)#Change the format of the date
library(lubridate) Fixed_asset_07\)MonthDiff <- interval(
Fixed_asset_07\(Date,Fixed_asset_07\)Closingdate)%/%
months(1)#Calculate the number of month between purchase time and
current time print(Fixed_asset_07) Fixed_asset_07\(Dep<-Fixed_asset_07\)Depreciation rate*Fixed_asset_07\(`Gross value`#Recalculate the dep.
Fixed_asset_07\)DepDiff<-Fixed_asset_07\(Dep-Fixed_asset_07\)Depreciation#Calculate
the difference between recalcuted dep. and original data
sum_Depreciation_Diff<-sum(Fixed_asset_07$DepDiff)
sum_Depreciation_Diff
Difference of depreciation is 0
Question 8: Calculate the correctness of the calculation of interest
on liabilities. Assume a rate of 8% pa.
Create a subset of Journal_en where the description is “Kredyty
bankowe długoterminowe”
Journal_subset <- Journal_en[Journal_en$Opis.1.35700. == “Kredyty
bankowe długoterminowe”, ] View(Journal_subset)
Create a subset of Journal_en where the description is “Kredyty
bankowe krótkoterminowe”
Journal_subset_2 <- Journal_en[Journal_en$Opis.1.35700. ==
“Kredyty bankowe krótkoterminowe”, ] View(Journal_subset_2)
Optional: Limit Journal_subset to the first 239 rows if needed
If this is not necessary, you can remove this step
Journal_subset <- Journal_subset[1:239, ] View(Journal_subset)
Create a subset of BankAcc_en where the description is “Kredyty
bankowe długoterminowe”
BA_subset <- BankAcc_en[BankAcc_en$Opis.1.35700. == “Kredyty
bankowe długoterminowe”, ] View(BA_subset)
Create a subset of BankAcc_en where the description is “Kredyty
bankowe krótkoterminowe”
Bank_account_subset_2 <- BankAcc_en[BankAcc_en$Opis.1.35700. ==
“Kredyty bankowe krótkoterminowe”, ] View(Bank_account_subset_2)
Question 9 Write the audit program for provisions. Test on Provisions
A provision is a liability of uncertain timing or amount that should
only be recognized if:
An entity has a present obligation (legal or constructive) as a
result of a past event. It is probable (greater than 50%) that an
outflow of economic resources will be required to settle the obligation.
A reliable estimate can be made of the amount of the obligation.
Therefore, the test on provisions should be based on these criteria.
Substantive Process 1. Present Obligation Constructive Obligation a.
Determine if a valid expectation has been created in other parties that
the entity will discharge the obligation. b. Discuss with the directors
whether they have formally announced their intention to address the
obligation, and confirm that a present obligation exists at the
year-end. If announced before the year-end, review supporting
documentation to verify that the decision was formally announced.
c. Review evidence of past practices, published policies, and statements
made to confirm the existence of a constructive obligation.
Legal Obligation a. Discuss with management the nature of the issue
to ensure a full understanding and to assess whether a legal obligation
exists. b. Review correspondence and other documentation to assess
whether the company has a present obligation as a result of past
events.
- Probable Outflow
- Review the post year-end period to identify whether any payments
have been made related to the provision.
- Discuss the position with directors regarding similar past
provisions. Were these provisions eventually settled?
- Review board minutes and company correspondence to ascertain whether
it is probable that payments will be made by examining the supporting
evidence.
- Write and send an inquiry letter to the company’s lawyers to obtain
their views on the probability of the claim being successful.
- Obtain a written representation from the directors to confirm the
completeness of the provision and their view that the chances of a
successful claim are remote, indicating that no provision or contingent
liability is required.
- Reliable Estimate
- Obtain a detailed breakdown of the calculation of the provision and
verify its completeness. Agree components of the calculation to
supporting documentation.
- Review any correspondence and other documentation to assess whether
the company has a reliable estimate of potential payments that might be
made.
This structured approach ensures that provisions are recognized,
measured, and disclosed accurately in the financial statements in
compliance with the relevant accounting standards.
QUESTION 10: GENERAL AUDIT PROGRAM A general audit program typically
consists of two main parts:
- Overall Audit Strategy The overall audit strategy is used to
determine the scope of the audit, reporting objectives, timing, audit
direction, and audit resources. At this stage, it is necessary to
confirm the following:
Appropriateness of the Audit Scope: Ensure that the scope of the
audit covers all relevant areas and risks. Reasonableness of the Time
Budget: Assess whether the time allocated for the audit is sufficient to
perform all necessary procedures. Appropriateness of the Selection:
Ensure the selection of audit areas, transactions, and balances is
appropriate. Determination of Materiality: Establish an appropriate
level of materiality for the financial statements as a whole and for
specific account balances and transactions. 2. Specific Audit Plan The
specific audit plan consists of three main steps: risk assessment,
further audit procedures, and other audit procedures.
Risk Assessment (Inherent Risk - IR)
Objective: Understand the entity and its environment. Assess the risk
of material misstatement at the financial statement and assertion
levels. Procedures: Obtain an understanding of the entity’s business,
industry, and regulatory environment. Identify and assess the risks of
material misstatement due to fraud or error. Further Audit Procedures
There are two types of further audit procedures:
- Tests of Control (Control Risk - CR)
Objective: Test the effectiveness of the entity’s internal controls
in preventing or detecting material misstatements. Procedures: Evaluate
the design and implementation of key internal controls. Perform tests of
control to determine whether controls are operating effectively. b.
Substantive Procedures (Detection Risk - DR)
Objective: Detect material misstatements in the financial statements.
Procedures: Tests of Detail: Verify the accuracy of specific
transactions and balances. Examples include: Vouching amounts back to
invoices. Performing physical inspection of assets. Analytical
Procedures: Use comparisons and relationships to assess the
reasonableness of account balances. Examples include: Variance analysis.
Ratio analysis. Proof in total. Other Audit Procedures
Objective: Address additional areas of concern based on professional
judgment. Procedures: Fraud Risk Assessment: Assess the risk of fraud
and design procedures to address identified risks. Going Concern
Assessment: Evaluate the entity’s ability to continue as a going
concern. Related Party Transactions: Identify and evaluate the nature
and business purpose of transactions with related parties. Other
Specific Procedures: Perform any additional procedures as required by
the specific circumstances of the audit. This general audit program
provides a comprehensive framework for conducting an audit, ensuring
that all critical areas are thoroughly examined and documented.
This is an R Markdown
Notebook. When you execute code within the notebook, the results appear
beneath the code.
Try executing this chunk by clicking the Run button within
the chunk or by placing your cursor inside it and pressing
Ctrl+Shift+Enter.
plot(cars)
Add a new chunk by clicking the Insert Chunk button on the
toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and
output will be saved alongside it (click the Preview button or
press Ctrl+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the
editor. Consequently, unlike Knit, Preview does not
run any R code chunks. Instead, the output of the chunk when it was last
run in the editor is displayed.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpkb3dsb2FkIHRoZSBmaWxlCnN1YjwtIHJlYWRSRFMoIlN1YnN0YXRuaXZlLlJEYXRhIikKVmlldyhzdWIpCgpUUkFOU0xBVEUgQ09MVU1OIEZST00gRU5HTElTSCBUTyBQT0xJU0gKQWdpbmdfZW48LXN1YiRBZ2luZyNhYnN0cmFjdCB0aGUgdGFibGUgb2YgQWdpbmcKVmlldyhBZ2luZ19lbikKY29sbmFtZXMoQWdpbmdfZW4pPC1jKCJMUCIsIk5yIiwiQWNjb3VudCBOYW1lIiwiVHlwIiwiV25fRHIiLCJNYV9DciIsIlR1cm5vdmVyIERyIiwiVHVybm92ZXIgQ3IiLCJTYWxkb19CYWxhbmNlIiwiQ3VycmVudCIsIjwzMCIsIjMxXzYwIiwiNjFfOTAiLCI5MF8xODAiLCIxODBfMzYwIiwiPjFZIiwiUEQiLCJMR0QiLCJFQUQiKQpCYW5rQWNjX2VuPC1zdWIkQmFua0FjYwpWaWV3KEJhbmtBY2NfZW4pCmNvbG5hbWVzKEJhbmtBY2NfZW4pPC1jKCJEYXRlIiwiS29udG9fRFIuMS4zNTcwMC4iLCJLb250b19DUi4xLjM1NzAwLiIsIldhcnRvc2MuMS4zNTcwMC4iLCJPcGlzLjEuMzU3MDAuIikKQ2hPQV9lbjwtc3ViJENoT0EKVmlldyhDaE9BX2VuKQpjb2xuYW1lcyhDaE9BX2VuKTwtYygiU2VjdGlvbiIsIk51bWJlciIsIkFjY291bnQgbmFtZSIsIkNsYXNzIiwiVHlwIikKSm91cm5hbF9lbjwtc3ViJEpvdXJuYWwKVmlldyhKb3VybmFsX2VuKQpjb2xuYW1lcyhKb3VybmFsX2VuKTwtYygiRGF0ZSIsIktvbnRvX0RSLjEuMzU3MDAuIiwiS29udG9fQ1IuMS4zNTcwMC4iLCJXYXJ0b3NjLjEuMzU3MDAuIiwiT3Bpcy4xLjM1NzAwLiIpCkNvdW50ZXI8LXN1YiRLb250cgpWaWV3KENvdW50ZXIpCmNvbG5hbWVzKENvdW50ZXIpPC1jKCJMUCIsIk5yIiwiTmFtZSIsIlR5cCIsIlduX0RyIiwiTWFfQ3IiLCJPQi5fV05fRFIiLCJPQi5fTUFfQ1IiLCJTYWxkb19CYWxhbmNlIikKVEJfZW48LXN1YiRUQgpWaWV3KFRCX2VuKQoKY29sbmFtZXMoVEJfZW4pPC1jKCJOciIsIkNsYXNzIiwiTlIuMSIsIkFjY291bnQgbmFtZSIsIkNsYXNzIiwiU3ViY2xhc3MiLCJPcGVuaW5nIEJhbGFuY2UiLCJEZWJpdCB0dXJub3ZlciIsIkNyZWRpdCB0dXJub3ZlciIsIkNsb3NpbmcgYmFsYW5jZSIpClpQS19lbjwtc3ViJFpQSwpWaWV3KFpQS19lbikKY29sbmFtZXMoWlBLX2VuKTwtYygiU2VjdGlvbiIsIk51bWJlciIsIk5hendhIGtvbnRhIiwiQWNjb3VudCBuYW1lIiwiQWNjb3VudCB0eXBlIikKRkFSX1JTVF9GaW5hbF9lbjwtc3ViJEZBUl9SU1RfRmluYWwKVmlldyhGQVJfUlNUX0ZpbmFsX2VuKQpjb2xuYW1lcyhGQVJfUlNUX0ZpbmFsX2VuKTwtYygiTFAiLCJEYXRlIiwiTmFtZSIsIkNpdHkiLCJEZXByZWNpYXRpb24gcmF0ZSIsIkdyb3NzIHZhbHVlIiwiQWNjLmRlcHJlY2lhdGlvbiIsIkRlcHJlY2lhdGlvbiIsIlNvbGQiLCJUeXBlIiwiTkFNRSIpCkNDX1BMX2VuPC1zdWIkQ0NfUEwKVmlldyhDQ19QTF9lbikKQ0NfQlNfZW48LXN1YiRDQ19CUwpWaWV3KENDX0JTX2VuKQoKUXVlc3Rpb24gMSBSZWNvbmNpbGUgdGhlIFR1cm5vdmVyIHRvIHRoZSBUJkUKCnR1cm5vdmVyIDwtIFRCX2VuJGBDcmVkaXQgdHVybm92ZXJgLVRCX2VuJGBEZWJpdCB0dXJub3ZlcmAKcmVjb25jaWxlZF9UQjwtIGNiaW5kKFRCX2VuLFR1cm5vdmVyPXR1cm5vdmVyKQpWaWV3KHJlY29uY2lsZWRfVEIpCgpRdWVzdGlvbiAyIE1ha2UgYW4gQW5hbHl0aWNhbCByZXZpZXcgb2YgZml4ZWQgYXNzZXRzIEIvTyArIEluY3JlYXNlcyAtIERlY3JlYXNlcyBSZWNsYXNzaWZpY2F0aW9uIEJaIGZvciBncm9zcyBhbmQgbmV0IHdvcnRoLiBBbmFseXRpY2FsbHkgY2hlY2sgdGhlIGFjY3J1YWwgZm9yIHRoZSByZWFzb25hYmxlbmVzcyBvZiB0aGUgZGVwcmVjaWF0aW9uIGNoYXJnZQoKRml4ZWRfYXNzZXRfYnM8LUNDX0JTX2VuWzcsXSNBYnN0cmFjdCBmaXhlZCBhc3NldHMgZnJvbSBCUwpWaWV3KEZpeGVkX2Fzc2V0X2JzKQpGaXhlZF9hc3NldF90YjwtVEJfZW5bYygxLDUpLGMoNCw3LDgsOSwxMCldI0ZpeGVkIGFzc2V0cyBhbmQgYWNjdW11bGF0ZWQgZGVwcmVjaWF0aW9uIGZyb20gVEIKVmlldyhGaXhlZF9hc3NldF90YikKRml4ZWRfYXNzZXRfVGJfT0I8LUZpeGVkX2Fzc2V0X3RiWzEsMl0tRml4ZWRfYXNzZXRfdGJbMiwyXSNDYWxjdWxhdGUgbmV0IHZhbHVlIG9mIGZpeGVkIGFzc2V0cyBhdCBwcmV2aW91cyBmaW5hbmNpYWwgeWVhcgpGaXhlZF9hc3NldF9UYl9PQgpGaXhlZF9hc3NldF9UYl9DQjwtRml4ZWRfYXNzZXRfdGJbMSw1XS1GaXhlZF9hc3NldF90YlsyLDVdI1RoZSBuZXQgdmFsdWUgb2YgZml4ZWQgYXNzZXRzIGF0IGN1cnJlbnQgZmluYW5jaWFsIHllYXIKRml4ZWRfYXNzZXRfVGJfQ0IKRml4ZWRfYXNzZXRfRGlmZjwtYyhGaXhlZF9hc3NldF9UYl9PQi1GaXhlZF9hc3NldF9ic1sxLDNdLEZpeGVkX2Fzc2V0X1RiX0NCLUZpeGVkX2Fzc2V0X2JzWzEsMl0pI0NvbXBhcmlzb24gb2YgdGhlIHJlc3VsdHMgZnJvbSBUQiBhbmQgQlMKRml4ZWRfYXNzZXRfRGlmZgoKVGhlIGZpeGVkIGFzc2V0c+KAmSBmaWd1cmVzIGluIHRoZSB0cmlhbCBiYWxhbmNlIChUQikgZm9yIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHllYXIgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgeWVhciBhcmUgYXMgZm9sbG93czogLTY0MCw4OTUuNCBhbmQgLTY3Myw1ODIuNSwgcmVzcGVjdGl2ZWx5LiBVcG9uIHJldmlld2luZyB0aGUgVEIsIGl0IGlzIGV2aWRlbnQgdGhhdCB0aGUgR3Jvc3MgVmFsdWUgb2YgZml4ZWQgYXNzZXRzIGhhcyBpbmNyZWFzZWQgZnJvbSAxNSw5MzAuNTIgdG8gMjIsODk0LjEzNiBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHllYXIuIENvbnNlcXVlbnRseSwgb25lIHdvdWxkIGV4cGVjdCB0aGUgYWNjdW11bGF0ZWQgZGVwcmVjaWF0aW9uIHRvIGhhdmUgYWxzbyBpbmNyZWFzZWQuIEhvd2V2ZXIsIHRoZSBUQiBzaG93cyB0aGF0IHRoZSB5ZWFyLWVuZCBhY2N1bXVsYXRlZCBkZXByZWNpYXRpb24gYW1vdW50IGlzIDcsOTQzLjY3Mywgd2hpY2ggaXMgbG93ZXIgdGhhbiB0aGUgYmVnaW5uaW5nLW9mLXRoZS15ZWFyIHZhbHVlIG9mIDEyLDEwMC45Mi4gVGhpcyBkaWZmZXJlbmNlIGluZGljYXRlcyBhYmlhaXNlZCBkZXByZWNpYXRpb24gY2hhcmdlIGZvciB0aGUgY3VycmVudCB5ZWFyLgoKUXVlc3Rpb24gMyBDaGVjayB0aGUgZml4ZWQgYXNzZXRzIHJlZ2lzdGVyIGZvciBhcml0aG1ldGljIGFjY3VyYWN5CgpGaXhlZF8zPC1GQVJfUlNUX0ZpbmFsX2VuWyxjKDExLDIsNSw2LDcsOCldI0V4dHJhY3QgIk5BTUUiIkRhdGUiIkRlcHJlY2lhdGlvbiByYXRlIiJHcm9zcyB2YWx1ZSIiQWNjLkRlcHJlY2l0aW9uImFuZCAiRGVwcmVjaWF0aW9uIiBmcm9tIEZBUgpWaWV3KEZpeGVkXzMpCkZpeGVkXzMkRGVwPC1GaXhlZF8zJGBEZXByZWNpYXRpb24gcmF0ZWAqRml4ZWRfMyRgR3Jvc3MgdmFsdWVgI2NhbGN1bGF0ZSB0aGUgZGVwcmVjaWF0aW9uIG9mIHRoZSBmaXhlZCBhc3NldHMKRml4ZWRfMyREZXBEaWZmPC1GaXhlZF8zJERlcC1GaXhlZF8zJERlcHJlY2lhdGlvbiAgICNDb21wYXJpc29uIG9mIHRoZSBkZXByZWNpYXRpb24gYWZ0ZXIgcmVjYWxjdWxhdGluZyB3aXRoIHRoZSBvcmlnaW5hbCBkZXByZWNpYXRpb24gaW4gdGhlIHRhYmxlCnN1bV9kZXByZWNhdGlvbl9EaWZmPC1zdW0oRml4ZWRfMyREZXBEaWZmKQpzdW1fZGVwcmVjYXRpb25fRGlmZgpGaXhlZF8zJENsb3NpbmdEYXRlPC1hcy5EYXRlKCIyMDIzLTA0LTMwIikgICNDcmVhdGUgYSBuZXcgY29sdW1uIGFuZCBpbnNlcnQgdGhlIGN1cnJlbnQgdGltZSBmcm9tIEpvdXJuYWwKRml4ZWRfMyREYXRlPC1hcy5EYXRlKEZpeGVkXzMkRGF0ZSkjQ2hhbmdlIGRhdGUgZm9ybWF0CmxpYnJhcnkobHVicmlkYXRlKQpGaXhlZF8zJE1vbnRoRGlmZjwtaW50ZXJ2YWwoRml4ZWRfMyREYXRlLEZpeGVkXzMkQ2xvc2luZ0RhdGUpJS8lIG1vbnRocygxKSNDYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1vbnRoIGJldHdlZW4gcHVyY2hhc2UgdGltZSBhbmQgY3VycmVudCB0aW1lCkZpeGVkXzMkQWNjLmRlcDwtKEZpeGVkXzMkRGVwLzEyKSpGaXhlZF8zJE1vbnRoRGlmZiNjYWxjdWxhdGUgdGhlIGFjY3VtdWxhdGVkIGRlcC4KRml4ZWRfMyRBY2MuZGVwPC1pZmVsc2UoRml4ZWRfMyRBY2MuZGVwPkZpeGVkXzMkYEdyb3NzIHZhbHVlYCxGaXhlZF8zJGBHcm9zcyB2YWx1ZWAsRml4ZWRfMyRBY2MuZGVwKSNXaGVuIHRoZSByZXN1bHQgaXMgaGlnaGVyIHRoYW4gZ3Jvc3MgdmFsdWUsdGhlbiB0aGUgYW5zd2VyIGlzIGdyb3NzIHZhbHVlCkZpeGVkXzMkQWNjLmRlcERpZmY8LShGaXhlZF8zJEFjYy5kZXAtRml4ZWRfMyRBY2MuZGVwcmVjaWF0aW9uKSNDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnaW5hbCBBY2MuZGVwLiBhbmQgcmVjYWxjdWxhdGVkIEFjYy5kZXAKc3VtX0FjYy5kZXBEaWZmPC1zdW0oRml4ZWRfMyRBY2MuZGVwRGlmZikKc3VtX0FjYy5kZXBEaWZmCgpRdWVzdGlvbiA0IDpsbnZhbGlkYXRlIHRoZSBwcm92aXNpb24gZm9yIHJlY2VpdmFibGVzLiBQcm9zcGVjdGl2ZSBhbmQgcmV0cm9zcGVjdGl2ZS4KCkFnaW5nX3N1YnNldDwtQWdpbmdfZW5bQWdpbmdfZW4kVHlwPT0iT2RiaW9yY2EiLF0jTWFrZSBhbiBleHRyYWN0aW9uIGJhc2VkIG9uIHRoZSBrZXl3b3JkIOKAnE9kYmlvcmNh4oCdb2YgVHlwIGNvbHVtbiBpbiBBZwpWaWV3KEFnaW5nX3N1YnNldCkKQWdpbmdfc3Vic2V0JFByb3Zpc2lvbjwtcm93U3VtcyhBZ2luZ19zdWJzZXRbLDExOjE2XSkjY2FsY3VsYXRlIHRoZSBzdW0gb2YgYmFkIGRlYnQgZm9yIGVhY2ggcGF0cm9uCnN1bVBybzwtc3VtKEFnaW5nX3N1YnNldCRQcm92aXNpb24pIyBzdW0gb2YgYmFkIGRlYnRzCnN1bVBybwpBZ2luZ19zdWJzZXQkRUw8LUFnaW5nX3N1YnNldCRQRCpBZ2luZ19zdWJzZXQkTEdEKkFnaW5nX3N1YnNldCRFQUQjY2FsY3VsYXRlIEVMIGZvciBlYWNoIHBhdHJvbgpzdW1FTDwtc3VtKEFnaW5nX3N1YnNldCRFTCkKc3VtRUwKUHJvdmlzaW9uX1RCPC1UQl9lblszNixdI3Byb3Zpc2lvbiBvZiBiYWQgZGVidHMgZm9yIHRyYWRlIHJlY2VpdmFibGUKVmlldyhQcm92aXNpb25fVEIpCkRpZmZfMTwtc3VtUHJvLVByb3Zpc2lvbl9UQlsxLDEwXSNDb21wYXJlIHRoZSBwcm92aXNpb24gZnJvbSBUQiB3aXRoIHRoZSBzdW0gb2YgYmFkIGRlYnQgYmFzZWQgb24gYWdpbmcgYW5hbHlzaXMKRGlmZl8xCkRpZmZfMjwtc3VtRUwtUHJvdmlzaW9uX1RCWzEsMTBdI0NvbXBhcmUgdGhlIHByb3Zpc2lvbiBmcm9tIFRCIHdpdGggdGhlIHN1bSBvZiBiYWQgZGVidCBiYXNlZCBvbiBwcm9zcGVjdGl2ZSBhcHByb2FjaApEaWZmXzIKVGhlIGRpZmZlcmVuY2VzIG9ic2VydmVkIHdoZW4gY29uc2lkZXJpbmcgdGhlIGFnaW5nIGFuYWx5c2lzIGFuZCBwcm9zcGVjdGl2ZSBhcHByb2FjaCBhcmUgYXMgZm9sbG93czogWzFdIDEyLDQzOSw1NjggWzFdIDE1Myw1NzUuOS4gQXNzZXNzaW5nIHRoZSBhZ2luZyBzdHVkeSBhbmQgYWRvcHRpbmcgYSBmb3J3YXJkLWxvb2tpbmcgcGVyc3BlY3RpdmUsIGl0IGJlY29tZXMgYXBwYXJlbnQgdGhhdCB0aGUgcHJvdmlzaW9uIHNwZWNpZmllZCBpbiB0aGUgdHJpYWwgYmFsYW5jZSAoVEIpIGlzIGluc3VmZmljaWVudCB0byBjb3ZlciB0aGUgYmFkIGRlYnQuIFRoZXJlZm9yZSwgYSBtb2RpZmljYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGFkZHJlc3MgdGhpcyBpc3N1ZS4KClF1ZXN0aW9uIDY6UmVjb25jaWxlIHRoZSBlcXVpdHkgcG9zaXRpb24gdG8gdGhlIEtSUyBleHRyYWN0LgoKRXF1aXR5X1RCPC1UQl9lbltjKDk5LDEwMCwxMDEsMTAyLDEwOSwxMTAsMTExKSxjKDQsNywxMCldI1Jvd3MgcmVsYXRlZCB0byBlcXVpdHkgZnJvbSBUQgpWaWV3KEVxdWl0eV9UQikKRXF1aXR5X1RCX09CPC1FcXVpdHlfVEJbMSwyXStFcXVpdHlfVEJbMiwyXStFcXVpdHlfVEJbMywyXStFcXVpdHlfVEJbNCwyXStFcXVpdHlfVEJbNSwyXS1FcXVpdHlfVEJbNiwyXS1FcXVpdHlfVEJbNywyXSMgZXF1aXR5IGF0IHRoZSBlbmQgb2YgcHJldmlvdXMgZmluYW5jaWFsIHllYXIKRXF1aXR5X1RCX09CCkVxdWl0eV9UQl9DQjwtRXF1aXR5X1RCWzEsM10rRXF1aXR5X1RCWzIsM10rRXF1aXR5X1RCWzMsM10rRXF1aXR5X1RCWzQsM10rRXF1aXR5X1RCWzUsM10tRXF1aXR5X1RCWzYsM10tRXF1aXR5X1RCWzcsM10jZXF1aXR5IGF0IHRoZSBlbmQgb2YgY3VycmVudCBmaW5hbmNpYWwgeWVhcgpFcXVpdHlfVEJfQ0IKRXF1aXR5XzAxPC1jKEVxdWl0eV9UQl9PQixFcXVpdHlfVEJfQ0IpClZpZXcoRXF1aXR5XzAxKQpFcXVpdHlfQlM8LUNDX0JTX2VuWzUwLF0jZXF1aXR5IGZyb20gQlMKVmlldyhFcXVpdHlfQlMpCkVxdWl0eV9EaWZmPC1jKEVxdWl0eV9UQl9PQi1FcXVpdHlfQlNbMSwzXSxFcXVpdHlfVEJfQ0ItRXF1aXR5X0JTWzEsMl0pI0NvbXBhcmlzb24gb2YgdGhlIHJlc3VsdHMgZnJvbSBUQiB3aXRoIHRoZSBkYXRhIGluIEJTCkVxdWl0eV9EaWZmCgpUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBmaW5hbmNpYWwgeWVhciBhbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmaW5hbmNpYWwgeWVhciBhcmUgYXMgZm9sbG93czogWzFdIC01MzgsMDE0LjkgLTU1Myw1MTQuOS4KClF1ZXN0aW9uIDcgVGFrZSBhIHNhbXBsZSBvZiBmaXhlZCBhc3NldHMgYW5kIGNoZWNrIHRoZSBjYWxjdWxhdGlvbiBvZiBkZXByZWNpYXRpb24uCgpzYW1wbGUoYygxOjExMyksMTAscmVwbGFjZSA9IEZBTFNFKSNQaWNrIDEwIG51bWJlciBmcm9tIDEgdG8gMTEzIGF0IHJhbmRvbQpGaXhlZF9hc3NldF8wNzwtRkFSX1JTVF9GaW5hbF9lbltjKDM3LDE2LDExLDc3LDkzLDcyLDExMiw3LDg1LDgzKSxjKDExLDIsNSw2LDcsOCw5KV0jRXh0cmFjdCBjb3JyZXNwb25kaW5nIHJvd3MgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIKVmlldyhGaXhlZF9hc3NldF8wNykKRml4ZWRfYXNzZXRfMDckQ2xvc2luZ2RhdGU8LWFzLkRhdGUoIjIwMjMtMDQtMzAiKSNDcmVhdGUgYSBuZXcgY29sdW1uIGFuZCBpbnNlcnQgdGhlIGN1cnJlbnQgdGltZSBmcm9tIEpvdXJhbmwKRml4ZWRfYXNzZXRfMDckRGF0ZTwtYXMuRGF0ZShGaXhlZF9hc3NldF8wNyREYXRlKSNDaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZQpsaWJyYXJ5KGx1YnJpZGF0ZSkKRml4ZWRfYXNzZXRfMDckTW9udGhEaWZmIDwtIGludGVydmFsKCBGaXhlZF9hc3NldF8wNyREYXRlLEZpeGVkX2Fzc2V0XzA3JENsb3NpbmdkYXRlKSUvJSBtb250aHMoMSkjQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbW9udGggYmV0d2VlbiBwdXJjaGFzZSB0aW1lIGFuZCBjdXJyZW50IHRpbWUKcHJpbnQoRml4ZWRfYXNzZXRfMDcpCkZpeGVkX2Fzc2V0XzA3JERlcDwtRml4ZWRfYXNzZXRfMDckYERlcHJlY2lhdGlvbiByYXRlYCpGaXhlZF9hc3NldF8wNyRgR3Jvc3MgdmFsdWVgI1JlY2FsY3VsYXRlIHRoZSBkZXAuCkZpeGVkX2Fzc2V0XzA3JERlcERpZmY8LUZpeGVkX2Fzc2V0XzA3JERlcC1GaXhlZF9hc3NldF8wNyREZXByZWNpYXRpb24jQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcmVjYWxjdXRlZCBkZXAuIGFuZCBvcmlnaW5hbCBkYXRhCnN1bV9EZXByZWNpYXRpb25fRGlmZjwtc3VtKEZpeGVkX2Fzc2V0XzA3JERlcERpZmYpCnN1bV9EZXByZWNpYXRpb25fRGlmZgoKRGlmZmVyZW5jZSBvZiBkZXByZWNpYXRpb24gaXMgMAoKUXVlc3Rpb24gODogQ2FsY3VsYXRlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY2FsY3VsYXRpb24gb2YgaW50ZXJlc3Qgb24gbGlhYmlsaXRpZXMuIEFzc3VtZSBhIHJhdGUgb2YgOCUgcGEuCgojIENyZWF0ZSBhIHN1YnNldCBvZiBKb3VybmFsX2VuIHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBpcyAiS3JlZHl0eSBiYW5rb3dlIGTFgnVnb3Rlcm1pbm93ZSIKSm91cm5hbF9zdWJzZXQgPC0gSm91cm5hbF9lbltKb3VybmFsX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBkxYJ1Z290ZXJtaW5vd2UiLCBdClZpZXcoSm91cm5hbF9zdWJzZXQpCgojIENyZWF0ZSBhIHN1YnNldCBvZiBKb3VybmFsX2VuIHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBpcyAiS3JlZHl0eSBiYW5rb3dlIGtyw7N0a290ZXJtaW5vd2UiCkpvdXJuYWxfc3Vic2V0XzIgPC0gSm91cm5hbF9lbltKb3VybmFsX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBrcsOzdGtvdGVybWlub3dlIiwgXQpWaWV3KEpvdXJuYWxfc3Vic2V0XzIpCgojIE9wdGlvbmFsOiBMaW1pdCBKb3VybmFsX3N1YnNldCB0byB0aGUgZmlyc3QgMjM5IHJvd3MgaWYgbmVlZGVkCiMgSWYgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCB5b3UgY2FuIHJlbW92ZSB0aGlzIHN0ZXAKSm91cm5hbF9zdWJzZXQgPC0gSm91cm5hbF9zdWJzZXRbMToyMzksIF0KVmlldyhKb3VybmFsX3N1YnNldCkKCiMgQ3JlYXRlIGEgc3Vic2V0IG9mIEJhbmtBY2NfZW4gd2hlcmUgdGhlIGRlc2NyaXB0aW9uIGlzICJLcmVkeXR5IGJhbmtvd2UgZMWCdWdvdGVybWlub3dlIgpCQV9zdWJzZXQgPC0gQmFua0FjY19lbltCYW5rQWNjX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBkxYJ1Z290ZXJtaW5vd2UiLCBdClZpZXcoQkFfc3Vic2V0KQoKIyBDcmVhdGUgYSBzdWJzZXQgb2YgQmFua0FjY19lbiB3aGVyZSB0aGUgZGVzY3JpcHRpb24gaXMgIktyZWR5dHkgYmFua293ZSBrcsOzdGtvdGVybWlub3dlIgpCYW5rX2FjY291bnRfc3Vic2V0XzIgPC0gQmFua0FjY19lbltCYW5rQWNjX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBrcsOzdGtvdGVybWlub3dlIiwgXQpWaWV3KEJhbmtfYWNjb3VudF9zdWJzZXRfMikKCgpRdWVzdGlvbiA5IFdyaXRlIHRoZSBhdWRpdCBwcm9ncmFtIGZvciBwcm92aXNpb25zLgpUZXN0IG9uIFByb3Zpc2lvbnMKQSBwcm92aXNpb24gaXMgYSBsaWFiaWxpdHkgb2YgdW5jZXJ0YWluIHRpbWluZyBvciBhbW91bnQgdGhhdCBzaG91bGQgb25seSBiZSByZWNvZ25pemVkIGlmOgogIAogIEFuIGVudGl0eSBoYXMgYSBwcmVzZW50IG9ibGlnYXRpb24gKGxlZ2FsIG9yIGNvbnN0cnVjdGl2ZSkgYXMgYSByZXN1bHQgb2YgYSBwYXN0IGV2ZW50LgpJdCBpcyBwcm9iYWJsZSAoZ3JlYXRlciB0aGFuIDUwJSkgdGhhdCBhbiBvdXRmbG93IG9mIGVjb25vbWljIHJlc291cmNlcyB3aWxsIGJlIHJlcXVpcmVkIHRvIHNldHRsZSB0aGUgb2JsaWdhdGlvbi4KQSByZWxpYWJsZSBlc3RpbWF0ZSBjYW4gYmUgbWFkZSBvZiB0aGUgYW1vdW50IG9mIHRoZSBvYmxpZ2F0aW9uLgpUaGVyZWZvcmUsIHRoZSB0ZXN0IG9uIHByb3Zpc2lvbnMgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZXNlIGNyaXRlcmlhLgoKU3Vic3RhbnRpdmUgUHJvY2VzcwoxLiBQcmVzZW50IE9ibGlnYXRpb24KQ29uc3RydWN0aXZlIE9ibGlnYXRpb24KYS4gRGV0ZXJtaW5lIGlmIGEgdmFsaWQgZXhwZWN0YXRpb24gaGFzIGJlZW4gY3JlYXRlZCBpbiBvdGhlciBwYXJ0aWVzIHRoYXQgdGhlIGVudGl0eSB3aWxsIGRpc2NoYXJnZSB0aGUgb2JsaWdhdGlvbi4KYi4gRGlzY3VzcyB3aXRoIHRoZSBkaXJlY3RvcnMgd2hldGhlciB0aGV5IGhhdmUgZm9ybWFsbHkgYW5ub3VuY2VkIHRoZWlyIGludGVudGlvbiB0byBhZGRyZXNzIHRoZSBvYmxpZ2F0aW9uLCBhbmQgY29uZmlybSB0aGF0IGEgcHJlc2VudCBvYmxpZ2F0aW9uIGV4aXN0cyBhdCB0aGUgeWVhci1lbmQuIElmIGFubm91bmNlZCBiZWZvcmUgdGhlIHllYXItZW5kLCByZXZpZXcgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0IHRoZSBkZWNpc2lvbiB3YXMgZm9ybWFsbHkgYW5ub3VuY2VkLgpjLiBSZXZpZXcgZXZpZGVuY2Ugb2YgcGFzdCBwcmFjdGljZXMsIHB1Ymxpc2hlZCBwb2xpY2llcywgYW5kIHN0YXRlbWVudHMgbWFkZSB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYSBjb25zdHJ1Y3RpdmUgb2JsaWdhdGlvbi4KCkxlZ2FsIE9ibGlnYXRpb24KYS4gRGlzY3VzcyB3aXRoIG1hbmFnZW1lbnQgdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgdG8gZW5zdXJlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIGFuZCB0byBhc3Nlc3Mgd2hldGhlciBhIGxlZ2FsIG9ibGlnYXRpb24gZXhpc3RzLgpiLiBSZXZpZXcgY29ycmVzcG9uZGVuY2UgYW5kIG90aGVyIGRvY3VtZW50YXRpb24gdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGNvbXBhbnkgaGFzIGEgcHJlc2VudCBvYmxpZ2F0aW9uIGFzIGEgcmVzdWx0IG9mIHBhc3QgZXZlbnRzLgoKMi4gUHJvYmFibGUgT3V0ZmxvdwphLiBSZXZpZXcgdGhlIHBvc3QgeWVhci1lbmQgcGVyaW9kIHRvIGlkZW50aWZ5IHdoZXRoZXIgYW55IHBheW1lbnRzIGhhdmUgYmVlbiBtYWRlIHJlbGF0ZWQgdG8gdGhlIHByb3Zpc2lvbi4KYi4gRGlzY3VzcyB0aGUgcG9zaXRpb24gd2l0aCBkaXJlY3RvcnMgcmVnYXJkaW5nIHNpbWlsYXIgcGFzdCBwcm92aXNpb25zLiBXZXJlIHRoZXNlIHByb3Zpc2lvbnMgZXZlbnR1YWxseSBzZXR0bGVkPwogIGMuIFJldmlldyBib2FyZCBtaW51dGVzIGFuZCBjb21wYW55IGNvcnJlc3BvbmRlbmNlIHRvIGFzY2VydGFpbiB3aGV0aGVyIGl0IGlzIHByb2JhYmxlIHRoYXQgcGF5bWVudHMgd2lsbCBiZSBtYWRlIGJ5IGV4YW1pbmluZyB0aGUgc3VwcG9ydGluZyBldmlkZW5jZS4KZC4gV3JpdGUgYW5kIHNlbmQgYW4gaW5xdWlyeSBsZXR0ZXIgdG8gdGhlIGNvbXBhbnnigJlzIGxhd3llcnMgdG8gb2J0YWluIHRoZWlyIHZpZXdzIG9uIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgY2xhaW0gYmVpbmcgc3VjY2Vzc2Z1bC4KZS4gT2J0YWluIGEgd3JpdHRlbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBkaXJlY3RvcnMgdG8gY29uZmlybSB0aGUgY29tcGxldGVuZXNzIG9mIHRoZSBwcm92aXNpb24gYW5kIHRoZWlyIHZpZXcgdGhhdCB0aGUgY2hhbmNlcyBvZiBhIHN1Y2Nlc3NmdWwgY2xhaW0gYXJlIHJlbW90ZSwgaW5kaWNhdGluZyB0aGF0IG5vIHByb3Zpc2lvbiBvciBjb250aW5nZW50IGxpYWJpbGl0eSBpcyByZXF1aXJlZC4KCjMuIFJlbGlhYmxlIEVzdGltYXRlCmEuIE9idGFpbiBhIGRldGFpbGVkIGJyZWFrZG93biBvZiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHByb3Zpc2lvbiBhbmQgdmVyaWZ5IGl0cyBjb21wbGV0ZW5lc3MuIEFncmVlIGNvbXBvbmVudHMgb2YgdGhlIGNhbGN1bGF0aW9uIHRvIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KYi4gUmV2aWV3IGFueSBjb3JyZXNwb25kZW5jZSBhbmQgb3RoZXIgZG9jdW1lbnRhdGlvbiB0byBhc3Nlc3Mgd2hldGhlciB0aGUgY29tcGFueSBoYXMgYSByZWxpYWJsZSBlc3RpbWF0ZSBvZiBwb3RlbnRpYWwgcGF5bWVudHMgdGhhdCBtaWdodCBiZSBtYWRlLgoKVGhpcyBzdHJ1Y3R1cmVkIGFwcHJvYWNoIGVuc3VyZXMgdGhhdCBwcm92aXNpb25zIGFyZSByZWNvZ25pemVkLCBtZWFzdXJlZCwgYW5kIGRpc2Nsb3NlZCBhY2N1cmF0ZWx5IGluIHRoZSBmaW5hbmNpYWwgc3RhdGVtZW50cyBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHJlbGV2YW50IGFjY291bnRpbmcgc3RhbmRhcmRzLgoKClFVRVNUSU9OIDEwOiBHRU5FUkFMIEFVRElUIFBST0dSQU0KQSBnZW5lcmFsIGF1ZGl0IHByb2dyYW0gdHlwaWNhbGx5IGNvbnNpc3RzIG9mIHR3byBtYWluIHBhcnRzOgoKMS4gT3ZlcmFsbCBBdWRpdCBTdHJhdGVneQpUaGUgb3ZlcmFsbCBhdWRpdCBzdHJhdGVneSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIGF1ZGl0LCByZXBvcnRpbmcgb2JqZWN0aXZlcywgdGltaW5nLCBhdWRpdCBkaXJlY3Rpb24sIGFuZCBhdWRpdCByZXNvdXJjZXMuIEF0IHRoaXMgc3RhZ2UsIGl0IGlzIG5lY2Vzc2FyeSB0byBjb25maXJtIHRoZSBmb2xsb3dpbmc6CgpBcHByb3ByaWF0ZW5lc3Mgb2YgdGhlIEF1ZGl0IFNjb3BlOiBFbnN1cmUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGF1ZGl0IGNvdmVycyBhbGwgcmVsZXZhbnQgYXJlYXMgYW5kIHJpc2tzLgpSZWFzb25hYmxlbmVzcyBvZiB0aGUgVGltZSBCdWRnZXQ6IEFzc2VzcyB3aGV0aGVyIHRoZSB0aW1lIGFsbG9jYXRlZCBmb3IgdGhlIGF1ZGl0IGlzIHN1ZmZpY2llbnQgdG8gcGVyZm9ybSBhbGwgbmVjZXNzYXJ5IHByb2NlZHVyZXMuCkFwcHJvcHJpYXRlbmVzcyBvZiB0aGUgU2VsZWN0aW9uOiBFbnN1cmUgdGhlIHNlbGVjdGlvbiBvZiBhdWRpdCBhcmVhcywgdHJhbnNhY3Rpb25zLCBhbmQgYmFsYW5jZXMgaXMgYXBwcm9wcmlhdGUuCkRldGVybWluYXRpb24gb2YgTWF0ZXJpYWxpdHk6IEVzdGFibGlzaCBhbiBhcHByb3ByaWF0ZSBsZXZlbCBvZiBtYXRlcmlhbGl0eSBmb3IgdGhlIGZpbmFuY2lhbCBzdGF0ZW1lbnRzIGFzIGEgd2hvbGUgYW5kIGZvciBzcGVjaWZpYyBhY2NvdW50IGJhbGFuY2VzIGFuZCB0cmFuc2FjdGlvbnMuCjIuIFNwZWNpZmljIEF1ZGl0IFBsYW4KVGhlIHNwZWNpZmljIGF1ZGl0IHBsYW4gY29uc2lzdHMgb2YgdGhyZWUgbWFpbiBzdGVwczogcmlzayBhc3Nlc3NtZW50LCBmdXJ0aGVyIGF1ZGl0IHByb2NlZHVyZXMsIGFuZCBvdGhlciBhdWRpdCBwcm9jZWR1cmVzLgoKUmlzayBBc3Nlc3NtZW50IChJbmhlcmVudCBSaXNrIC0gSVIpCgpPYmplY3RpdmU6IFVuZGVyc3RhbmQgdGhlIGVudGl0eSBhbmQgaXRzIGVudmlyb25tZW50LiBBc3Nlc3MgdGhlIHJpc2sgb2YgbWF0ZXJpYWwgbWlzc3RhdGVtZW50IGF0IHRoZSBmaW5hbmNpYWwgc3RhdGVtZW50IGFuZCBhc3NlcnRpb24gbGV2ZWxzLgpQcm9jZWR1cmVzOgpPYnRhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXR54oCZcyBidXNpbmVzcywgaW5kdXN0cnksIGFuZCByZWd1bGF0b3J5IGVudmlyb25tZW50LgpJZGVudGlmeSBhbmQgYXNzZXNzIHRoZSByaXNrcyBvZiBtYXRlcmlhbCBtaXNzdGF0ZW1lbnQgZHVlIHRvIGZyYXVkIG9yIGVycm9yLgpGdXJ0aGVyIEF1ZGl0IFByb2NlZHVyZXMKVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBmdXJ0aGVyIGF1ZGl0IHByb2NlZHVyZXM6CgphLiBUZXN0cyBvZiBDb250cm9sIChDb250cm9sIFJpc2sgLSBDUikKCk9iamVjdGl2ZTogVGVzdCB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgZW50aXR54oCZcyBpbnRlcm5hbCBjb250cm9scyBpbiBwcmV2ZW50aW5nIG9yIGRldGVjdGluZyBtYXRlcmlhbCBtaXNzdGF0ZW1lbnRzLgpQcm9jZWR1cmVzOgpFdmFsdWF0ZSB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBrZXkgaW50ZXJuYWwgY29udHJvbHMuClBlcmZvcm0gdGVzdHMgb2YgY29udHJvbCB0byBkZXRlcm1pbmUgd2hldGhlciBjb250cm9scyBhcmUgb3BlcmF0aW5nIGVmZmVjdGl2ZWx5LgpiLiBTdWJzdGFudGl2ZSBQcm9jZWR1cmVzIChEZXRlY3Rpb24gUmlzayAtIERSKQoKT2JqZWN0aXZlOiBEZXRlY3QgbWF0ZXJpYWwgbWlzc3RhdGVtZW50cyBpbiB0aGUgZmluYW5jaWFsIHN0YXRlbWVudHMuClByb2NlZHVyZXM6ClRlc3RzIG9mIERldGFpbDogVmVyaWZ5IHRoZSBhY2N1cmFjeSBvZiBzcGVjaWZpYyB0cmFuc2FjdGlvbnMgYW5kIGJhbGFuY2VzLiBFeGFtcGxlcyBpbmNsdWRlOgpWb3VjaGluZyBhbW91bnRzIGJhY2sgdG8gaW52b2ljZXMuClBlcmZvcm1pbmcgcGh5c2ljYWwgaW5zcGVjdGlvbiBvZiBhc3NldHMuCkFuYWx5dGljYWwgUHJvY2VkdXJlczogVXNlIGNvbXBhcmlzb25zIGFuZCByZWxhdGlvbnNoaXBzIHRvIGFzc2VzcyB0aGUgcmVhc29uYWJsZW5lc3Mgb2YgYWNjb3VudCBiYWxhbmNlcy4gRXhhbXBsZXMgaW5jbHVkZToKVmFyaWFuY2UgYW5hbHlzaXMuClJhdGlvIGFuYWx5c2lzLgpQcm9vZiBpbiB0b3RhbC4KT3RoZXIgQXVkaXQgUHJvY2VkdXJlcwoKT2JqZWN0aXZlOiBBZGRyZXNzIGFkZGl0aW9uYWwgYXJlYXMgb2YgY29uY2VybiBiYXNlZCBvbiBwcm9mZXNzaW9uYWwganVkZ21lbnQuClByb2NlZHVyZXM6CkZyYXVkIFJpc2sgQXNzZXNzbWVudDogQXNzZXNzIHRoZSByaXNrIG9mIGZyYXVkIGFuZCBkZXNpZ24gcHJvY2VkdXJlcyB0byBhZGRyZXNzIGlkZW50aWZpZWQgcmlza3MuCkdvaW5nIENvbmNlcm4gQXNzZXNzbWVudDogRXZhbHVhdGUgdGhlIGVudGl0eeKAmXMgYWJpbGl0eSB0byBjb250aW51ZSBhcyBhIGdvaW5nIGNvbmNlcm4uClJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zOiBJZGVudGlmeSBhbmQgZXZhbHVhdGUgdGhlIG5hdHVyZSBhbmQgYnVzaW5lc3MgcHVycG9zZSBvZiB0cmFuc2FjdGlvbnMgd2l0aCByZWxhdGVkIHBhcnRpZXMuCk90aGVyIFNwZWNpZmljIFByb2NlZHVyZXM6IFBlcmZvcm0gYW55IGFkZGl0aW9uYWwgcHJvY2VkdXJlcyBhcyByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyBvZiB0aGUgYXVkaXQuClRoaXMgZ2VuZXJhbCBhdWRpdCBwcm9ncmFtIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBmcmFtZXdvcmsgZm9yIGNvbmR1Y3RpbmcgYW4gYXVkaXQsIGVuc3VyaW5nIHRoYXQgYWxsIGNyaXRpY2FsIGFyZWFzIGFyZSB0aG9yb3VnaGx5IGV4YW1pbmVkIGFuZCBkb2N1bWVudGVkLgoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAoKYGBge3J9CnBsb3QoY2FycykKYGBgCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ3RybCtBbHQrSSouCgpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkN0cmwrU2hpZnQrSyogdG8gcHJldmlldyB0aGUgSFRNTCBmaWxlKS4KClRoZSBwcmV2aWV3IHNob3dzIHlvdSBhIHJlbmRlcmVkIEhUTUwgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGVkaXRvci4gQ29uc2VxdWVudGx5LCB1bmxpa2UgKktuaXQqLCAqUHJldmlldyogZG9lcyBub3QgcnVuIGFueSBSIGNvZGUgY2h1bmtzLiBJbnN0ZWFkLCB0aGUgb3V0cHV0IG9mIHRoZSBjaHVuayB3aGVuIGl0IHdhcyBsYXN0IHJ1biBpbiB0aGUgZWRpdG9yIGlzIGRpc3BsYXllZC4K