Machine Learning, Modeling, & Cross Validation

Unsupervised Learning Algorithms and Predictive modeling

Big Back Behavior | [Report]
Predicting obesity rankings based on behavioral survey results [click for more details]

  • Real world data; medium data set (approx 2,200 observations)
  • CART regression prediction models, CART classification prediction models, Bootstrap BAGGING regression prediction models, & Bootstrap BAGGING classification prediction models
  • Variable importance analysis, hyperparameter tuning, model pruning, ROC curve analysis & optimal cutoff identification
  • Analysis goals:
    • Develop overweight/obesity prediction model utilizing patient lifestyle and behavioral information, excluding weight
    • Develop weight independent prediction models for overweight/obesity to allow for prediction of those at risk based on behavioral & lifestyle choices


Can you pay me back? | [Report] & [Presentation]
Loan Default Borrower Data Clustering & Analysis [click for more details]

  • Report & supporting presentation
  • Synthetic data. Medium data set (approx. 1000 observations)
  • K means clustering, agglomerative hierarchical data clustering, principal component analysis, local outlier factor analysis


Blind Breast Biopsies | [Report]
Predicting Breast Tissue Biopsy Diagnosis In the Event of Incomplete Biopsy [click for more details]

  • Synthetic data. Small data set (approx. 600 observations)
  • Logistic predictive modeling, single-layer neural network model (perceptron) prediction, decision tree algorithms, ROC analysis, and bagging


Linear & Logistic Regression Modeling Using Machine learning Approaches

A Blind Taste Test | [Report]
Predicting sommelier quality rankings of wine and wine type (red/white) utilizing chemical composition alone [click for more details]

  • Real world data; medium data set (approx. 6,500 observations)
  • Regularized linear & logistic regression prediction models, support vector machine (SVM) regression and classification models
  • Coefficient path analysis, hyperparameter tuning, and optimal cut off probability analysis for optimized accuracy and specificity.
  • Analysis goals:
    • Identifying the best possible prediction model for sommelier wine quality ranking based on chemical composition
    • Creating a white vs red prediction model for blend wines that do not neatly fall into either category


Hold That Plane! | [Report]
An analisis of global flight delay data and prediction model creation to reduce delays and increase live prediction capabilities [click for more details]

  • Synthetic data with forced missing values. Medium data set (over 3,500 observations)
  • Multiple Imputation by Chained Equations, Ruben’s rules, Recursive feature elimination, Principal Component Analysis, k-Means Clustering
  • Forward elimination model creation, cross validation, Receiver Operating Characteristic (ROC) comparison
  • Analysis goals:
    • Identifying the variables with greatest impact on overall flight delay for subsequent mitigation and preventative efforts
    • Live flight delay prediction based on available flight data prior to landing (predicting total delay time before flights depart)


Regression

Regression Analysis & Model Creation

Can We Predict the Future in Health? | [Report]
Framingham Heart Study Model Fitting and Cross Validatiion for BMI Predictions [click for more details]

  • Real world data. Medium data set (approx. 4,200 observations)
  • Linear regression model creation, box-cox transformation, mean square error (MSE) cross validation, logistic regression model creation, receiver operating characteristic (ROC) and area under the curve (AUC) model comparison


Dominating the Lies in the IIP - DOMI Sub-Scale | [Presentation] & [SAS Code] & [Requirements]
NIDA Cocaine Data Analysis for Improved Weighting and Predictions of IIP-DOMI Sub-scale [click for more details]

  • Real world data. Medium data data set (Approx. 2,700 observations)
  • Analysis of the potential relationship between DOMI score and treatment type with best fit covariates to determine if treatment type impacts patients’ self reported DOMI scores
  • Analysis of the potential relationship between DOMI score and the interaction of treatment type and type of cocaine used (cocaine or crack) to determine if the combination of treatment type and type of cocaine used impacts patients’ self reported DOMI scores
  • Analysis of the potential relationship between DOMI score and a selection of aggregate “home stability” variables, comprised of the interaction between marital status (married or single), employment status, and education status (HS diploma, GED, or lesser education vs greater than HS education) to determine if the combination of home stability variables impacts patients’ self reported DOMI scores


Linear Regression Dashboard

Melbourne Housing Market | [R Shiny FlexDashboard]
Housing market price simple linear regression analysis [click for more details]

  • Real world data. Large data set (over 34,000 observations)
  • Interactive design allowing for variable selection and model manipulation
  • Interactive and input responsive plots utilizing Plot_ly
  • Responsive regression model diagnostics
  • Developed using Shiny/FlexDashboard
    • Note regression model not built for accuracy, developed to showcase dashboard build ability


Presentations

Computer Randomization Algorithms: Drug Development Pipeline | [Presentation]
A background review of various computer driven randomization algorithms in the drug development pipeline [click for more details]

  • Mass Spectrometry plate randomization through block randomization software
  • Integrated Web Randomization Service (IWRS) for patient randomization in clinical trials


Pizzaz.com Speed Dating Comparability Prediction | [Proposal] & [Presentation] & [SAS Code]
Speed Dating Analytics & Online Dating Optimization [click for more details]

  • Synthetic data. Small data set (276 observations)
  • An analysis of variables impacting overall dater interest and linear regression prediction model creation
  • Proposal for data utilization and business improvement


Data Visualization and Exploratory Data Analysis

Exploratory Data Analysis & Variable Relationship Exploration

I’m Going to Miss my Flight! | [Report]
An analysis of flight delay times across airports [click for more details]

  • Synthetic data with forced missing values. Medium data set (over 3,500 observations)
  • Analysis of variables impacting flight delays & solution implementation
  • ggplot & Plot_ly interactive visualizations


Presidential Fitness Test | [Report]
The Impact of Local Education, Poverty, and Unemployment Rates on County Presidential Election Results [click for more details]

  • Four real world data sets utilized. Large data sets (over 72,000 observations)
  • Relational data sets and data aggregation
  • GeoJSON & leaflet Interactive Map, ggplot


Data Visualization

The Price of Longevity | [Report]
An Analysis of Annual Income on Life Expectancy [click for more details]

  • Real world data. Large data set (over 35,000 observations)
  • An analysis of variables impacting average life expectancy
  • ggplot & Plot_ly interactive visualizations


Presidential Election Results Per County Per Year | [Map]
Geo-spatial data interactive mapping in Tableau | [click for more details]

  • Real world data. Large data set (over 72,000 observations)
  • An analysis of Presidential Election Data from 2000 through 2020


National Health and Nutrition Examination Survey (NHANES) | [Storypoint] & [Dashboard]
Public health data analysis in Tableau Storypoint & Dashboard | [click for more details]

  • Real world data. Medium data set (approx. 7,900 observations)
  • An analysis of NHANES data of Smoking, Blood Pressure, and Serum Cholesterol Levels

LS0tDQp0aXRsZTogIlByb2plY3RzIGFuZCBQcmVzZW50YXRpb25zOiA8aW1nIHNyYz1cImh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTUxL0hXMDEvaW1nL3Blbmd1aW5fY3V0ZS5wbmdcIiBzdHlsZT1cImZsb2F0OiByaWdodDsgd2lkdGg6IDEyJVwiLz4iDQpzdWJ0aXRsZTogIkNoZWNrIG91dCB0aGUgbGlua3MgYmVsb3cgdG8gc2VlIHdoYXQgSSBoYXZlIGJlZW4gd29ya2luZyBvbiEiDQphdXRob3I6DQotIG5hbWU6IE5hdGFsaWUgTGVQZXJhDQogIGFmZmlsaWF0aW9uOiBXZXN0IENoZXN0ZXIgVW5pdmVyc2l0eSB8IE0uUy4gQXBwbGllZCBTdGF0aXN0aWNzLCBEYXRhIFNjaWVuY2UgQ29uY2VudHJhdG9uDQpkYXRlOiAiTGFzdCBVcGRhdGU6IDA3IEFwciAyMDI2Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgdG9jX2NvbGxhcHNlOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIGZpZ19hbGlnbjogY2VudGVyDQogICAgZGZfcHJpbnQ6IGthYmxlDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KaDEudGl0bGUgeyAgLyogVGl0bGUgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIHRoZSByZXBvcnQgdGl0bGUgKi8NCiAgZm9udC13ZWlnaHQ6Ym9sZDsNCiAgY29sb3I6IGRhcmttYWdlbnRhIDsNCn0NCmgxLnN1YnRpdGxlIHsgIC8qIFRpdGxlIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgcmVwb3J0IHRpdGxlICovDQogIGZvbnQtd2VpZ2h0OmJvbGQ7DQogIGNvbG9yOiBkYXJrbWFnZW50YSA7DQp9DQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGF1dGhvcnMgICovDQogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7DQogIGNvbG9yOiBuYXZ5Ow0KfQ0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIGRhdGUgICovDQogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7DQogIGNvbG9yOiBuYXZ5Ow0KfQ0KaDEgeyAvKiBIZWFkZXIgMSAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGxldmVsIDEgc2VjdGlvbiB0aXRsZSAgKi8NCiAgICBmb250LXdlaWdodDpib2xkOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQpoMiB7IC8qIEhlYWRlciAyIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgbGV2ZWwgMiBzZWN0aW9uIHRpdGxlICovDQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KDQpoMyB7IC8qIEhlYWRlciAzIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBvZiBsZXZlbCAzIHNlY3Rpb24gdGl0bGUgICovDQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gZm9udCBzcGVjaWZpY2F0aW9ucyBvZiBsZXZlbCA0IHNlY3Rpb24gdGl0bGUgICovDQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KYm9keSB7DQogIGJhY2tncm91bmQtY29sb3I6d2hpdGU7DQogIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KICAgIH0NCg0KLmhpZ2hsaWdodG1lIHsgDQogIGJhY2tncm91bmQtY29sb3I6eWVsbG93OyANCn0NCg0KcCB7IA0KICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyANCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KaDUgew0KICBjb2xvcjogbmF2eTsNCiAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCi5pZnJhbWUgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmE6bGluayB7DQogIGNvbG9yOiBwdXJwbGUgOw0KICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KLmZpZ2xhYmVsIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogZGFya3NsYXRlZ3JheTsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMTg7DQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCi50ZDEgew0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCnRoLCB0ZCB7DQogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOw0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQp0cjpob3ZlciB7YmFja2dyb3VuZC1jb2xvcjogY29yYWw7fQ0KYGBgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCjxzY3JpcHQgc3JjPSJodHRwczovL2VsZnNpZ2h0Y2RuLmNvbS9wbGF0Zm9ybS5qcyIgYXN5bmM+PC9zY3JpcHQ+DQo8ZGl2IGNsYXNzPSJlbGZzaWdodC1hcHAtNWZjODQ2NWQtOGI2Mi00NjVlLTkzNGUtNzFkNmQ3NDI2OTY1IiBkYXRhLWVsZnNpZ2h0LWFwcC1sYXp5PjwvZGl2Pg0KICANCg0KDQojIyBNYWNoaW5lIExlYXJuaW5nLCBNb2RlbGluZywgJiBDcm9zcyBWYWxpZGF0aW9uIA0KDQojIyMjIFVuc3VwZXJ2aXNlZCBMZWFybmluZyBBbGdvcml0aG1zIGFuZCBQcmVkaWN0aXZlIG1vZGVsaW5nDQoNCjxmb250IGNsYXNzID0gInRkMSI+QmlnIEJhY2sgQmVoYXZpb3I8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ycHVicy5jb20vbmxlcGVyYS9zdGE1NTJfSFcwNSIgdGFyZ2V0ID0gImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlByZWRpY3Rpbmcgb2Jlc2l0eSByYW5raW5ncyBiYXNlZCBvbiBiZWhhdmlvcmFsIHN1cnZleSByZXN1bHRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YTsgbWVkaXVtIGRhdGEgc2V0IChhcHByb3ggMiwyMDAgb2JzZXJ2YXRpb25zKQ0KICAtIENBUlQgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgQ0FSVCBjbGFzc2lmaWNhdGlvbiBwcmVkaWN0aW9uIG1vZGVscywgQm9vdHN0cmFwIEJBR0dJTkcgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgJiBCb290c3RyYXAgQkFHR0lORyBjbGFzc2lmaWNhdGlvbiBwcmVkaWN0aW9uIG1vZGVscw0KICAtIFZhcmlhYmxlIGltcG9ydGFuY2UgYW5hbHlzaXMsIGh5cGVycGFyYW1ldGVyIHR1bmluZywgbW9kZWwgcHJ1bmluZywgUk9DIGN1cnZlIGFuYWx5c2lzICYgb3B0aW1hbCBjdXRvZmYgaWRlbnRpZmljYXRpb24NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAtIERldmVsb3Agb3ZlcndlaWdodC9vYmVzaXR5IHByZWRpY3Rpb24gbW9kZWwgdXRpbGl6aW5nIHBhdGllbnQgbGlmZXN0eWxlIGFuZCBiZWhhdmlvcmFsIGluZm9ybWF0aW9uLCA8Yj5leGNsdWRpbmc8L2I+IHdlaWdodA0KICAgIC0gRGV2ZWxvcCB3ZWlnaHQgaW5kZXBlbmRlbnQgcHJlZGljdGlvbiBtb2RlbHMgZm9yIG92ZXJ3ZWlnaHQvb2Jlc2l0eSB0byBhbGxvdyBmb3IgcHJlZGljdGlvbiBvZiB0aG9zZSBhdCByaXNrIGJhc2VkIG9uIGJlaGF2aW9yYWwgJiBsaWZlc3R5bGUgY2hvaWNlcw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5DYW4geW91IHBheSBtZSBiYWNrPzwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzA0IiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTEvRklOQUwvIiB0YXJnZXQgPSJibGFuayI+W1ByZXNlbnRhdGlvbl08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5Mb2FuIERlZmF1bHQgQm9ycm93ZXIgRGF0YSBDbHVzdGVyaW5nICYgQW5hbHlzaXMgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gUmVwb3J0ICYgc3VwcG9ydGluZyBwcmVzZW50YXRpb24NCiAgLSBTeW50aGV0aWMgZGF0YS4gTWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDEwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIEsgbWVhbnMgY2x1c3RlcmluZywgYWdnbG9tZXJhdGl2ZSBoaWVyYXJjaGljYWwgZGF0YSBjbHVzdGVyaW5nLCBwcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzLCBsb2NhbCBvdXRsaWVyIGZhY3RvciBhbmFseXNpcw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkJsaW5kIEJyZWFzdCBCaW9wc2llczwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzAzIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5QcmVkaWN0aW5nIEJyZWFzdCBUaXNzdWUgQmlvcHN5IERpYWdub3NpcyBJbiB0aGUgRXZlbnQgb2YgSW5jb21wbGV0ZSBCaW9wc3kgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gU3ludGhldGljIGRhdGEuIFNtYWxsIGRhdGEgc2V0IChhcHByb3guIDYwMCBvYnNlcnZhdGlvbnMpDQogIC0gTG9naXN0aWMgcHJlZGljdGl2ZSBtb2RlbGluZywgc2luZ2xlLWxheWVyIG5ldXJhbCBuZXR3b3JrIG1vZGVsIChwZXJjZXB0cm9uKSBwcmVkaWN0aW9uLCBkZWNpc2lvbiB0cmVlIGFsZ29yaXRobXMsIFJPQyBhbmFseXNpcywgYW5kIGJhZ2dpbmcNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgTGluZWFyICYgTG9naXN0aWMgUmVncmVzc2lvbiBNb2RlbGluZyBVc2luZyBNYWNoaW5lIGxlYXJuaW5nIEFwcHJvYWNoZXMNCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5BIEJsaW5kIFRhc3RlIFRlc3Q8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ycHVicy5jb20vbmxlcGVyYS9zdGE1NTJfSFcwNCIgdGFyZ2V0ID0gImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlByZWRpY3Rpbmcgc29tbWVsaWVyIHF1YWxpdHkgcmFua2luZ3Mgb2Ygd2luZSBhbmQgd2luZSB0eXBlIChyZWQvd2hpdGUpIHV0aWxpemluZyBjaGVtaWNhbCBjb21wb3NpdGlvbiBhbG9uZSBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGE7IG1lZGl1bSBkYXRhIHNldCAoYXBwcm94LiA2LDUwMCBvYnNlcnZhdGlvbnMpDQogIC0gUmVndWxhcml6ZWQgbGluZWFyICYgbG9naXN0aWMgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgc3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoU1ZNKSByZWdyZXNzaW9uIGFuZCBjbGFzc2lmaWNhdGlvbiBtb2RlbHMNCiAgLSBDb2VmZmljaWVudCBwYXRoIGFuYWx5c2lzLCBoeXBlcnBhcmFtZXRlciB0dW5pbmcsIGFuZCBvcHRpbWFsIGN1dCBvZmYgcHJvYmFiaWxpdHkgYW5hbHlzaXMgZm9yIG9wdGltaXplZCBhY2N1cmFjeSBhbmQgc3BlY2lmaWNpdHkuDQogIC0gQW5hbHlzaXMgZ29hbHM6DQogICAgICAtIElkZW50aWZ5aW5nIHRoZSBiZXN0IHBvc3NpYmxlIHByZWRpY3Rpb24gbW9kZWwgZm9yIHNvbW1lbGllciB3aW5lIHF1YWxpdHkgcmFua2luZyBiYXNlZCBvbiBjaGVtaWNhbCBjb21wb3NpdGlvbg0KICAgICAgLSBDcmVhdGluZyBhIHdoaXRlIHZzIHJlZCBwcmVkaWN0aW9uIG1vZGVsIGZvciBibGVuZCB3aW5lcyB0aGF0IGRvIG5vdCBuZWF0bHkgZmFsbCBpbnRvIGVpdGhlciBjYXRlZ29yeQ0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KICA8Zm9udCBjbGFzcyA9ICJ0ZDEiPiBIb2xkIFRoYXQgUGxhbmUhIDwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1Ml9IVzAzIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+IA0KPGRldGFpbHM+PHN1bW1hcnk+QW4gYW5hbGlzaXMgb2YgZ2xvYmFsIGZsaWdodCBkZWxheSBkYXRhIGFuZCBwcmVkaWN0aW9uIG1vZGVsIGNyZWF0aW9uIHRvIHJlZHVjZSBkZWxheXMgYW5kIGluY3JlYXNlIGxpdmUgcHJlZGljdGlvbiBjYXBhYmlsaXRpZXMgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gU3ludGhldGljIGRhdGEgd2l0aCBmb3JjZWQgbWlzc2luZyB2YWx1ZXMuIE1lZGl1bSBkYXRhIHNldCAob3ZlciAzLDUwMCBvYnNlcnZhdGlvbnMpDQogIC0gTXVsdGlwbGUgSW1wdXRhdGlvbiBieSBDaGFpbmVkIEVxdWF0aW9ucywgUnViZW4ncyBydWxlcywgUmVjdXJzaXZlIGZlYXR1cmUgZWxpbWluYXRpb24sIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMsIGstTWVhbnMgQ2x1c3RlcmluZw0KICAtIEZvcndhcmQgZWxpbWluYXRpb24gbW9kZWwgY3JlYXRpb24sIGNyb3NzIHZhbGlkYXRpb24sIFJlY2VpdmVyIE9wZXJhdGluZyBDaGFyYWN0ZXJpc3RpYyAoUk9DKSBjb21wYXJpc29uDQogIC0gQW5hbHlzaXMgZ29hbHM6DQogICAgICAtIElkZW50aWZ5aW5nIHRoZSB2YXJpYWJsZXMgd2l0aCBncmVhdGVzdCBpbXBhY3Qgb24gb3ZlcmFsbCBmbGlnaHQgZGVsYXkgZm9yIHN1YnNlcXVlbnQgbWl0aWdhdGlvbiBhbmQgcHJldmVudGF0aXZlIGVmZm9ydHMNCiAgICAgIC0gTGl2ZSBmbGlnaHQgZGVsYXkgcHJlZGljdGlvbiBiYXNlZCBvbiBhdmFpbGFibGUgZmxpZ2h0IGRhdGEgcHJpb3IgdG8gbGFuZGluZyAocHJlZGljdGluZyB0b3RhbCBkZWxheSB0aW1lIGJlZm9yZSBmbGlnaHRzIGRlcGFydCkNCjwvcD4NCjwvZGV0YWlscz4NCjxicj4NCg0KDQojIyBSZWdyZXNzaW9uDQoNCiMjIyMgUmVncmVzc2lvbiBBbmFseXNpcyAmIE1vZGVsIENyZWF0aW9uDQoNCjxmb250IGNsYXNzID0gInRkMSI+Q2FuIFdlIFByZWRpY3QgdGhlIEZ1dHVyZSBpbiBIZWFsdGg/PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcnB1YnMuY29tL25sZXBlcmEvc3RhNTUxX2h3MDIiIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PkZyYW1pbmdoYW0gSGVhcnQgU3R1ZHkgTW9kZWwgRml0dGluZyBhbmQgQ3Jvc3MgVmFsaWRhdGlpb24gZm9yIEJNSSBQcmVkaWN0aW9ucyBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuIE1lZGl1bSBkYXRhIHNldCAoYXBwcm94LiA0LDIwMCBvYnNlcnZhdGlvbnMpDQogIC0gTGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgY3JlYXRpb24sIGJveC1jb3ggdHJhbnNmb3JtYXRpb24sIG1lYW4gc3F1YXJlIGVycm9yIChNU0UpIGNyb3NzIHZhbGlkYXRpb24sIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwgY3JlYXRpb24sIHJlY2VpdmVyIG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpYyAoUk9DKSBhbmQgYXJlYSB1bmRlciB0aGUgY3VydmUgKEFVQykgbW9kZWwgY29tcGFyaXNvbg0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5Eb21pbmF0aW5nIHRoZSBMaWVzIGluIHRoZSBJSVAgLSBET01JIFN1Yi1TY2FsZTwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL25sZXBlcmEuZ2l0aHViLmlvL3N0YTUxMy9MZVBlcmFfTl9GaW5hbCUyMFByb2plY3RfMjAyNS0xMi0wOV9JUFAlMjBET01JLnBkZiIgdGFyZ2V0ID0iYmxhbmsiPltQcmVzZW50YXRpb25dPC9hPiAmIDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTEzL0xlUGVyYV9OX0ZpbmFsJTIwUHJvamVjdF8yMDI1LTEyLTA5X0lQUCUyMERPTUklMjBTQVMucGRmIiB0YXJnZXQgPSJibGFuayI+W1NBUyBDb2RlXTwvYT4gJiA8YSBocmVmID0gImh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTEzL0xlUGVyYV9OX0ZpbmFsJTIwUHJvamVjdF8yMDI1LTEyLTA5X0luc3RydWN0aW9ucy5wZGYiIHRhcmdldCA9ImJsYW5rIj5bUmVxdWlyZW1lbnRzXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5Pk5JREEgQ29jYWluZSBEYXRhIEFuYWx5c2lzIGZvciBJbXByb3ZlZCBXZWlnaHRpbmcgYW5kIFByZWRpY3Rpb25zIG9mIElJUC1ET01JIFN1Yi1zY2FsZSBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuIE1lZGl1bSBkYXRhIGRhdGEgc2V0IChBcHByb3guIDIsNzAwIG9ic2VydmF0aW9ucykNCiAgLSBBbmFseXNpcyBvZiB0aGUgcG90ZW50aWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIERPTUkgc2NvcmUgYW5kIHRyZWF0bWVudCB0eXBlIHdpdGggYmVzdCBmaXQgY292YXJpYXRlcyB0byBkZXRlcm1pbmUNCmlmIHRyZWF0bWVudCB0eXBlIGltcGFjdHMgcGF0aWVudHPigJkgc2VsZiByZXBvcnRlZCBET01JIHNjb3Jlcw0KICAtIEFuYWx5c2lzIG9mIHRoZSBwb3RlbnRpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gRE9NSSBzY29yZSBhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRyZWF0bWVudCB0eXBlIGFuZCB0eXBlIG9mDQpjb2NhaW5lIHVzZWQgKGNvY2FpbmUgb3IgY3JhY2spIHRvIGRldGVybWluZSBpZiB0aGUgY29tYmluYXRpb24gb2YgdHJlYXRtZW50IHR5cGUgYW5kIHR5cGUgb2YgY29jYWluZSB1c2VkDQppbXBhY3RzIHBhdGllbnRz4oCZIHNlbGYgcmVwb3J0ZWQgRE9NSSBzY29yZXMNCiAgLSBBbmFseXNpcyBvZiB0aGUgcG90ZW50aWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIERPTUkgc2NvcmUgYW5kIGEgc2VsZWN0aW9uIG9mIGFnZ3JlZ2F0ZSDigJxob21lIHN0YWJpbGl0eeKAnSB2YXJpYWJsZXMsDQpjb21wcmlzZWQgb2YgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gbWFyaXRhbCBzdGF0dXMgKG1hcnJpZWQgb3Igc2luZ2xlKSwgZW1wbG95bWVudCBzdGF0dXMsIGFuZCBlZHVjYXRpb24gc3RhdHVzDQooSFMgZGlwbG9tYSwgR0VELCBvciBsZXNzZXIgZWR1Y2F0aW9uIHZzIGdyZWF0ZXIgdGhhbiBIUyBlZHVjYXRpb24pIHRvIGRldGVybWluZSBpZiB0aGUgY29tYmluYXRpb24gb2YgaG9tZQ0Kc3RhYmlsaXR5IHZhcmlhYmxlcyBpbXBhY3RzIHBhdGllbnRz4oCZIHNlbGYgcmVwb3J0ZWQgRE9NSSBzY29yZXMNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgTGluZWFyIFJlZ3Jlc3Npb24gRGFzaGJvYXJkDQoNCjxmb250IGNsYXNzID0gInRkMSI+TWVsYm91cm5lIEhvdXNpbmcgTWFya2V0PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5zaGlueWFwcHMuaW8vZmluYWwvIiB0YXJnZXQgPSJibGFuayI+W1IgU2hpbnkgRmxleERhc2hib2FyZF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5Ib3VzaW5nIG1hcmtldCBwcmljZSBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gUmVhbCB3b3JsZCBkYXRhLiAgTGFyZ2UgZGF0YSBzZXQgKG92ZXIgMzQsMDAwIG9ic2VydmF0aW9ucykNCiAgLSBJbnRlcmFjdGl2ZSBkZXNpZ24gYWxsb3dpbmcgZm9yIHZhcmlhYmxlIHNlbGVjdGlvbiBhbmQgbW9kZWwgbWFuaXB1bGF0aW9uDQogIC0gSW50ZXJhY3RpdmUgYW5kIGlucHV0IHJlc3BvbnNpdmUgcGxvdHMgdXRpbGl6aW5nIFBsb3RfbHkNCiAgLSBSZXNwb25zaXZlIHJlZ3Jlc3Npb24gbW9kZWwgZGlhZ25vc3RpY3MNCiAgLSBEZXZlbG9wZWQgdXNpbmcgU2hpbnkvRmxleERhc2hib2FyZA0KICAgIC0gTm90ZSByZWdyZXNzaW9uIG1vZGVsIG5vdCBidWlsdCBmb3IgYWNjdXJhY3ksIGRldmVsb3BlZCB0byBzaG93Y2FzZSBkYXNoYm9hcmQgYnVpbGQgYWJpbGl0eQ0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KDQojIyBQcmVzZW50YXRpb25zDQoNCjxmb250IGNsYXNzID0gInRkMSI+Q29tcHV0ZXIgUmFuZG9taXphdGlvbiBBbGdvcml0aG1zOiBEcnVnIERldmVsb3BtZW50IFBpcGVsaW5lPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhMTIvTGVQZXJhX05fUHJvamVjdCAxXzIwMjYtMDQtMDYucGRmIiB0YXJnZXQgPSJibGFuayI+W1ByZXNlbnRhdGlvbl08L2E+IA0KPGRldGFpbHM+PHN1bW1hcnk+QSBiYWNrZ3JvdW5kIHJldmlldyBvZiB2YXJpb3VzIGNvbXB1dGVyIGRyaXZlbiByYW5kb21pemF0aW9uIGFsZ29yaXRobXMgaW4gdGhlIGRydWcgZGV2ZWxvcG1lbnQgcGlwZWxpbmUgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gTWFzcyBTcGVjdHJvbWV0cnkgcGxhdGUgcmFuZG9taXphdGlvbiB0aHJvdWdoIGJsb2NrIHJhbmRvbWl6YXRpb24gc29mdHdhcmUNCiAgLSBJbnRlZ3JhdGVkIFdlYiBSYW5kb21pemF0aW9uIFNlcnZpY2UgKElXUlMpIGZvciBwYXRpZW50IHJhbmRvbWl6YXRpb24gaW4gY2xpbmljYWwgdHJpYWxzDQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KDQoNCjxmb250IGNsYXNzID0gInRkMSI+UGl6emF6LmNvbSBTcGVlZCBEYXRpbmcgQ29tcGFyYWJpbGl0eSBQcmVkaWN0aW9uPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTExL0xlUGVyYV9OX0V4YW0lMjAyXzIwMjUuMDQuMjIucGRmIiB0YXJnZXQgPSJibGFuayI+W1Byb3Bvc2FsXTwvYT4gJiA8YSBocmVmPSJodHRwczovL25sZXBlcmEuZ2l0aHViLmlvL3N0YTUxMS9leGFtMl9wZGYucGRmIiB0YXJnZXQgPSJibGFuayI+W1ByZXNlbnRhdGlvbl08L2E+ICYgPGEgaHJlZiA9ICJodHRwczovL25sZXBlcmEuZ2l0aHViLmlvL3N0YTUxMS9leGFtMl9TQVMucGRmIiB0YXJnZXQ9ImJsYW5rIj5bU0FTIENvZGVdPC9hPg0KPGRldGFpbHM+PHN1bW1hcnk+U3BlZWQgRGF0aW5nIEFuYWx5dGljcyAmIE9ubGluZSBEYXRpbmcgT3B0aW1pemF0aW9uIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFN5bnRoZXRpYyBkYXRhLiBTbWFsbCBkYXRhIHNldCAoMjc2IG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiB2YXJpYWJsZXMgaW1wYWN0aW5nIG92ZXJhbGwgZGF0ZXIgaW50ZXJlc3QgYW5kIGxpbmVhciByZWdyZXNzaW9uIHByZWRpY3Rpb24gbW9kZWwgY3JlYXRpb24NCiAgLSBQcm9wb3NhbCBmb3IgZGF0YSB1dGlsaXphdGlvbiBhbmQgYnVzaW5lc3MgaW1wcm92ZW1lbnQNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCg0KIyMgRGF0YSBWaXN1YWxpemF0aW9uIGFuZCBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzDQoNCiMjIyMgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAmIFZhcmlhYmxlIFJlbGF0aW9uc2hpcCBFeHBsb3JhdGlvbg0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkknbSBHb2luZyB0byBNaXNzIG15IEZsaWdodCE8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTIvSFcwMS9pbmRleC5odG1sIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5BbiBhbmFseXNpcyBvZiBmbGlnaHQgZGVsYXkgdGltZXMgYWNyb3NzIGFpcnBvcnRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFN5bnRoZXRpYyBkYXRhIHdpdGggZm9yY2VkIG1pc3NpbmcgdmFsdWVzLiBNZWRpdW0gZGF0YSBzZXQgKG92ZXIgMyw1MDAgb2JzZXJ2YXRpb25zKQ0KICAtIEFuYWx5c2lzIG9mIHZhcmlhYmxlcyBpbXBhY3RpbmcgZmxpZ2h0IGRlbGF5cyAmIHNvbHV0aW9uIGltcGxlbWVudGF0aW9uDQogIC0gZ2dwbG90ICYgUGxvdF9seSBpbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9ucyANCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCjxmb250IGNsYXNzID0gInRkMSI+UHJlc2lkZW50aWFsIEZpdG5lc3MgVGVzdDwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzAxIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5UaGUgSW1wYWN0IG9mIExvY2FsIEVkdWNhdGlvbiwgUG92ZXJ0eSwgYW5kIFVuZW1wbG95bWVudCBSYXRlcyBvbiBDb3VudHkgUHJlc2lkZW50aWFsIEVsZWN0aW9uIFJlc3VsdHMgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gRm91ciByZWFsIHdvcmxkIGRhdGEgc2V0cyB1dGlsaXplZC4gTGFyZ2UgZGF0YSBzZXRzIChvdmVyIDcyLDAwMCBvYnNlcnZhdGlvbnMpDQogIC0gUmVsYXRpb25hbCBkYXRhIHNldHMgYW5kIGRhdGEgYWdncmVnYXRpb24NCiAgLSBHZW9KU09OICYgbGVhZmxldCBJbnRlcmFjdGl2ZSBNYXAsIGdncGxvdA0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KIyMjIyBEYXRhIFZpc3VhbGl6YXRpb24NCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5UaGUgUHJpY2Ugb2YgTG9uZ2V2aXR5PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTUzL3cwNl9wbG90bHkvIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5BbiBBbmFseXNpcyBvZiBBbm51YWwgSW5jb21lIG9uIExpZmUgRXhwZWN0YW5jeSBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuIExhcmdlIGRhdGEgc2V0IChvdmVyIDM1LDAwMCBvYnNlcnZhdGlvbnMpDQogIC0gQW4gYW5hbHlzaXMgb2YgdmFyaWFibGVzIGltcGFjdGluZyBhdmVyYWdlIGxpZmUgZXhwZWN0YW5jeQ0KICAtIGdncGxvdCAmIFBsb3RfbHkgaW50ZXJhY3RpdmUgdmlzdWFsaXphdGlvbnMNCjwvcD48L2RldGFpbHM+DQo8YnI+DQogIA0KPGZvbnQgY2xhc3MgPSAidGQxIj5QcmVzaWRlbnRpYWwgRWxlY3Rpb24gUmVzdWx0cyBQZXIgQ291bnR5IFBlciBZZWFyPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3ZpZXdzL1ByZXNpZGVudGlhbEVsZWN0aW9uUmVzdWx0c1BlckNvdW50eVBlclllYXIvU2hlZXQxPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bTWFwXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5Pkdlby1zcGF0aWFsIGRhdGEgaW50ZXJhY3RpdmUgbWFwcGluZyBpbiBUYWJsZWF1IHwgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gUmVhbCB3b3JsZCBkYXRhLiBMYXJnZSBkYXRhIHNldCAob3ZlciA3MiwwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIEFuIGFuYWx5c2lzIG9mIFByZXNpZGVudGlhbCBFbGVjdGlvbiBEYXRhIGZyb20gMjAwMCB0aHJvdWdoIDIwMjANCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCjxmb250IGNsYXNzID0gInRkMSI+TmF0aW9uYWwgSGVhbHRoIGFuZCBOdXRyaXRpb24gRXhhbWluYXRpb24gU3VydmV5IChOSEFORVMpPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3ZpZXdzL05IQU5FU0hlYWx0aERhdGEtU3Rvcnlwb2ludC9TbW9raW5nSGVhbHRoPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bU3Rvcnlwb2ludF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vdmlld3MvTkhBTkVTSGVhbHRoRGF0YS9TbW9raW5nRGFzaGJvYXJkPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bRGFzaGJvYXJkXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlB1YmxpYyBoZWFsdGggZGF0YSBhbmFseXNpcyBpbiBUYWJsZWF1IFN0b3J5cG9pbnQgJiBEYXNoYm9hcmQgfCBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuIE1lZGl1bSBkYXRhIHNldCAoYXBwcm94LiA3LDkwMCBvYnNlcnZhdGlvbnMpDQogIC0gQW4gYW5hbHlzaXMgb2YgTkhBTkVTIGRhdGEgb2YgU21va2luZywgQmxvb2QgUHJlc3N1cmUsIGFuZCBTZXJ1bSBDaG9sZXN0ZXJvbCBMZXZlbHMNCjwvcD48L2RldGFpbHM+DQoNCg==